![]() |
eXeL@B —› Вопросы новичков —› hiew редактирование байтов в режиме asm |
Посл.ответ | Сообщение |
|
Создано: 19 января 2013 17:09 · Поправил: Glycerin · Личное сообщение · #1 доброго времени суток, разбираюсь со своей первой прогой, почти все места проверки реги открутил, но код у меня там использовался вид xor eax eax или jle изменял на jmp и.т.д, а теперь возникла небольшая загвоздка, есть простой код листинг 1: 00404DFD: 8B4C2410 mov ecx,[esp][010]; здесь в регистр мне требуется записать timestamp 2050 года 00404E01: 894C2474 mov [esp][074],ecx 00404E05: 8B54241C mov edx,[esp][01C] 00404E09: 89542470 mov [esp][070],edx 00404E0D: C644244203 mov b,[esp][042],3 00404E12: C644244307 mov b,[esp][043],7 00404E17: C644244400 mov b,[esp][044],0 00404E1C: C644244509 mov b,[esp][045],9 произвожу такие действия в hiew, Edit -> ASM -> mov ecx, 9692E0054h, далее hiew почему то переводит листинг приведенный выше к виду, где добавляются две дополнительные строки (1) и (2) листинг 2 (код с изменениями): 000041FD: B954E09296 mov ecx,09692E054 ;'ЦТрT' 00004202: 4C dec esp ; (1) сдвигаем указатель стека на 1 00004203: 2474 and al,074 ;'t' ; (2) в регистре EAX изменяем самый старший байт на 74h 00004205: 8B54241C mov edx,[esp][01C] 00004209: 89542470 mov [esp][070],edx 0000420D: C644244203 mov b,[esp][042],3 00004212: C644244307 mov b,[esp][043],7 00004217: C644244400 mov b,[esp][044],0 0000421C: C644244509 mov b,[esp][045],9 листинг 3: 00004170: 8B15DC074700 mov edx,[0004707DC] 00004176: 8B442410 mov eax,[esp][010] ; этот множитель мне требуется изменить 0000417A: 0FAFD0 imul edx,eax ; здесь умножаются два значения 0000417D: A1D0674700 mov eax,[0004767D0] 00004182: 89542410 mov [esp][010],edx 00004186: F7D8 neg eax 00004188: 1BC0 sbb eax,eax 0000418A: 83E0B2 and eax,0B2 ;'▓' 0000418D: 83C04E add eax,04E ;'N' 00004190: 0144244C add [esp][04C],eax 00004194: 8B0F mov ecx,[edi] 00004196: 8B5704 mov edx,[edi][4] 00004199: 8B4708 mov eax,[edi][8] 0000419C: 894C245C mov [esp][05C],ecx 000041A0: 8B4F10 mov ecx,[edi][010] 000041A3: 89542460 mov [esp][060],edx 000041A7: 89442464 mov [esp][064],eax 000041AB: 894C2474 mov [esp][074],ecx 000041AF: 8B15E0074700 mov edx,[0004707E0] 000041B5: 03542410 add edx,[esp][010] 000041B9: 8B4714 mov eax,[edi][014] произвожу теже самые действия на выходе листинг c двумя добавленным строками (1) и (2) причем команда по адресу 0000417D в листинге 3 удаляется вовсе из листинга 4 листинг 4: 00004170: 8B15DC074700 mov edx,[0004707DC] 00004176: B8990C0000 mov eax,000000C99 ;' ♀Щ' 0000417B: AF scasd ; (1) здесь зачем-то производится поиск байта 0000417C: D0A1D0674700 shl b,[ecx][0004767D0],1 ; (2) здесь свдиг на еденицу 00004182: 89542410 mov [esp][010],edx 00004186: F7D8 neg eax 00004188: 1BC0 sbb eax,eax 0000418A: 83E0B2 and eax,0B2 ;'▓' 0000418D: 83C04E add eax,04E ;'N' 00004190: 0144244C add [esp][04C],eax 00004194: 8B0F mov ecx,[edi] 00004196: 8B5704 mov edx,[edi][4] 00004199: 8B4708 mov eax,[edi][8] 0000419C: 894C245C mov [esp][05C],ecx 000041A0: 8B4F10 mov ecx,[edi][010] 000041A3: 89542460 mov [esp][060],edx 000041A7: 89442464 mov [esp][064],eax 000041AB: 894C2474 mov [esp][074],ecx 000041AF: 8B15E0074700 mov edx,[0004707E0] 000041B5: 03542410 add edx,[esp][010] 000041B9: 8B4714 mov eax,[edi][014] ребят объясните пожалуйста мне такое поведение инструкций после редактирования, потому что это ломает логику программы P.S. предполагаю, что такая фигня происходит из за сдвига адресов при редактировании и эти прорехи надо просто nop'ить ![]() |
|
Создано: 19 января 2013 17:10 · Личное сообщение · #2 |
|
Создано: 19 января 2013 17:10 · Поправил: ajax · Личное сообщение · #3 |
|
Создано: 19 января 2013 17:21 · Личное сообщение · #4 |
|
Создано: 19 января 2013 17:25 · Поправил: Glycerin · Личное сообщение · #5 |
|
Создано: 19 января 2013 17:29 · Личное сообщение · #6 |
|
Создано: 19 января 2013 17:30 · Поправил: ajax · Личное сообщение · #7 Glycerin пишет: листинг 1: 00404DFD: 8B4C2410 mov ecx,[esp][010]; здесь в регистр мне требуется записать timestamp 00404E01: 894C2474 mov [esp][074],ecx если ECX дальше не важен, то C744247478563412 mov d,[esp][074],012345678 ; timestamp и так далее, оптимизировать код. или, как Vovan сказал ----- От многой мудрости много скорби, и умножающий знание умножает печаль ![]() |
|
Создано: 19 января 2013 17:33 · Личное сообщение · #8 |
![]() |
eXeL@B —› Вопросы новичков —› hiew редактирование байтов в режиме asm |