y bueno me e fijado que siempre que uso APIs en la sección de codigo me genera unos JMPs a las APIs, y me puse a averiguar
del porque.
y por ejemplo este sencillo codigo ( lo muestro de una vez el dessensamblado):
Código:
00401000 >/$ 6A 00 PUSH 0 ; /Style = MB_OK|MB_APPLMODAL
00401002 |. 68 05304000 PUSH TEST.00403005 ; |Title = "cap"
00401007 |. 68 00304000 PUSH TEST.00403000 ; |Text = "test"
0040100C |. 6A 00 PUSH 0 ; |hOwner = NULL
0040100E |. E8 0D000000 CALL <JMP.&user32.MessageBoxA> ; \MessageBoxA
00401013 |. 6A 00 PUSH 0 ; /ExitCode = 0
00401015 \. E8 00000000 CALL <JMP.&kernel32.ExitProcess> ; \ExitProcess
0040101A .-FF25 00204000 JMP DWORD PTR DS:[<&kernel32.ExitProcess>; kernel32.ExitProcess
00401020 $-FF25 08204000 JMP DWORD PTR DS:[<&user32.MessageBoxA>] ; user32.MessageBoxA
00401026 00 DB 00
00401027 00 DB 00
hasta ahora supongo que seria la Import table que se rellena con las direcciones pero ahora
viendo con analizador PE ( es mismo programa) la import table esta en la direccion:
Código:
Virtual Address Size
Import Table: 00402010 0000003C
se supone que estaria en la direccion tal pero... no.
no se supondria que el call saltaria a la import table? tambien quiza estoy confundiendo con la IAT pero ya me e leido algunos conceptos
creo que estoy confundido no :| o falta algo por explicar
tambien me e fijado que depurando algunos codigo de programas cuando hacen algun call a una API no salta a una tabla que vendria siendo la IT
sino salta de una sola vez a la API sin pasar a un JMP antes, el JMP deberia ser siempre no :|
bueno gracias y perdon y fue larga pero no encontre una forma más corta para darme a entender lo hice lo mas corto posible.