Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.08.2011, 15:11   #1
VintProg
not
Участник клуба
 
Аватар для VintProg
 
Регистрация: 27.06.2009
Сообщений: 1,399
Вопрос Как заменить cmp?

Вот кусок кода:

Код:
.text:004C47DF 028                 inc     ebx             ; default
.text:004C47DF                                             ; jumptable 004C478B cases 0-2
.text:004C47E0 028                 add     ebp, 38h
.text:004C47E3 028                 cmp     ebx, 4Bh        ; edx < 4Bh  (markers)
.text:004C47E6 028                 fldz
.text:004C47E8 028                 fldz
.text:004C47EA 028                 fldz
.text:004C47EC 028                 jl      loc_4C49F0
беда в том что в это сравнивание больше байта не запишешь .text:004C47E3 028 cmp ebx, 4Bh

как мне пачнуть его чтобы можно было записывать 2 байта туда,

писал такую функцию:

void injectFunction (DWORD address, DWORD function)
{
DWORD Old;
VirtualProtect( PVOID(address), 16, PAGE_READWRITE, &Old);
BYTE * patch = (BYTE *)address;
*patch = 0xE9; // JMP
*(DWORD *)(patch+1) = (function-(address+5));
VirtualProtect( PVOID(address), 16, Old, &Old);
}


Пытался кусок кода заменить, но все равно ошибка!


Код:
injectFunction(0x04C47E3, (DWORD)Code_1); 

void  Code_1()
{
 _asm cmp  ebx, 10h
 _asm fldz
 return;
}
кто знает выход из данной ситуации, пожалуйста помогите!
VintProg вне форума Ответить с цитированием
Старый 12.08.2011, 21:29   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Если тулить некуда, то пиши свой зловредный код в конец файла, где как правило нули. А в том месте втули CALL на адрес твоего червячка. И не забудь - те команды, которые съест САLL нужно будет прикрепить к червячку.
Идею понял?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 13.08.2011, 04:46   #3
VintProg
not
Участник клуба
 
Аватар для VintProg
 
Регистрация: 27.06.2009
Сообщений: 1,399
По умолчанию

Так я не статику меняю, а динамический, через dll, и это не червяк.
VintProg вне форума Ответить с цитированием
Старый 14.08.2011, 13:05   #4
rpy3uH
добрый няша
Старожил
 
Аватар для rpy3uH
 
Регистрация: 29.10.2006
Сообщений: 4,804
По умолчанию

Цитата:
Сообщение от VintProg Посмотреть сообщение
В
беда в том что в это сравнивание больше байта не запишешь .text:004C47E3 028 cmp ebx, 4Bh

как мне пачнуть его чтобы можно было записывать 2 байта туда,
я так и не понял что надо сделать. и куда надо записать два байта?
P.S. cmp ebx, 4Bh занимает три байта.
rpy3uH вне форума Ответить с цитированием
Старый 14.08.2011, 16:40   #5
SnX
Форумчанин
 
Регистрация: 30.10.2009
Сообщений: 114
По умолчанию

Можно немного "соптимизить" так, чтобы влезли еще 3 байта, но на этотм куске мало что можно сделать, нужно больше кода увидеть.
Подозреваю еще, что fldz там нафиг не нужны и это издержки компилятора, но опять же чтобы понять, нужно увидеть больше кода. Если так, то можно сделать что-то типа такого:
cmp ebx, FFFFh
nop
nop
nop
SnX вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
cmp и указатели CraZZZy-GameRRR Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 6 08.03.2011 23:46
Как заменить файл на сайте? jekaz Работа с сетью в Delphi 7 08.05.2010 21:33
Как заменить макрос на формулу? Maxx Microsoft Office Excel 2 04.03.2009 13:13
как перейдти на заклаку и заменить ее Tiolic Microsoft Office Word 2 09.10.2007 12:51