Оригинальный DVD-ROM: eXeL@B DVD !
eXeL@B ВИДЕОКУРС !

ВИДЕОКУРС ВЗЛОМ
выпущен 8 октября!


УЗНАТЬ БОЛЬШЕ >>
Домой | Статьи | RAR-cтатьи | FAQ | Форум | Скачать | Видеокурс
Новичку | Ссылки | Программирование | Интервью | Архив | Связь

АРХИВ ФОРУМА eXeL@B
https://exelab.ru/f/

   

zss FASM (проблемма со стеком) До входа в DisasmInstr esp = 0x0012ff60


zss FASM (проблемма со стеком) До входа в DisasmInstr esp = 0x0012ff60

После выхода из disasm_main и
add esp, 8

esp = 0x0012ff24

Далее leave

esp = 0x0012ff58

а после ret 0x04 и возврата после DisasmInstr

esp = 0x0013cb60 - ПОЧЕМУ ???

format PE GUI 4.0 DLL
entry DllEntryPoint

include 'lde32bin.inc'
include '..\Include\win32a.inc'

;================================================= =====================================;
; Section Data ;
;================================================= =====================================;
section '.data' data readable writeable
table: times 65536 db 0

;================================================= =====================================;
; Section Code ;
;================================================= =====================================;

section '.code' code readable executable

;============================== DllEntryPoint =========================================;
proc DllEntryPoint, hinstDLL, fdwReason, lpvReserved
enter
mov eax, TRUE
return
endp

;================== ULONG DisasmInstr(ULONG Address) ==================================;
proc DisasmInstr, Address
enter

push table
call disasm_init
add esp, 4

push [Address]
push table
call disasm_main
add esp, 8

return

endp

;======================= ULONG Disasm(ULONG Address, ULONG Length) ====================;
proc Disasm, Address, Length
enter
push ebx
mov ebx, [Address]

cycle:
push ebx
call DisasmInstr

add ebx, eax

mov ecx, ebx
sub ecx, [Address]
mov eax, ecx
cmp ecx, [Length]
jae exit

jmp cycle

exit:
pop ebx
return
endp

;================================================= =====================================;
; Export Data ;
;================================================= =====================================;
section '.edata' export data readable

export 'DISASM.DLL',\
DisasmInstr, 'DisasmInstr',\
Disasm, 'Disasm'

section '.reloc' fixups data discardable
;================================================= =====================================;

Dragon :: А как тут разбираться вообще? Единственное, что можно сказать, что так извратить стек может только инструкция leave, т.к. она копирует в esp из ebp, значит регистр ebp где-то использовался и не сохранился. А чтобы проблем не было перепиши это всё без макросов, стандартно push ebp; mov ebp, esp на входе, а pop ebp; ret xx на выходе.

zss Re: Dragon :: Даже не используя enter и return компилятор все равно создает

push ebp
mov ebp, esp
...

pop ebp
ret

без меня






   
Оригинальный DVD-ROM: eXeL@B DVD !


Вы находитесь на EXELAB.rU
Проект ReactOS