no entiendo este error en asm con gcc, que puede estar mal?

Iniciado por Belial & Grimoire, 17 Mayo 2010, 00:06 AM

0 Miembros y 1 Visitante están viendo este tema.

Belial & Grimoire

hola

estuve viendo un post hecho aqui sobre como ejecutar asm en VC++ 6 con una inyeccion... lo intente en gcc pero cuando lo hago me dice otras cosas

en el post escribieron esto

Código (cpp) [Seleccionar]

#include <windows.h>
#define ZOutput 0x00401080

char* t = "Hola";

while(1)
{
//Para utilizar assembler en c++ ponemos __asm
__asm
{
pushad //guardamos los valores de los registros para no intervenir con el progama
push t//ponemos t en el stack
mov eax, ZOutput//Muevo la direccion de la funcion a eax
call eax//Llamo a eax (llamo a la funcion)
add esp,4//Limpio el Stack modificando la ultima direccion introducida
popad//reestablecemos los registros
}
Sleep(1000);
}


pero yo no he podido usar "#define" ni tampoco el puntero a char "t"..., y lo hice asi... mingcc me deja compilarlo, pero cuando lo ejecuto, me aparece un error y se cierra el programa

int main(){

    while(1){

        __asm__("pusha\n\t"
        "push 222\n\t"
        "mov 0x004012D0, %eax\n\t"
        "call %eax\n\t"
        "add %esp,4\n\t"
        "popa");
    }


}


hice mi propio inyector, mi propia funcion y la dll funciona sin problemas si al colocar en el while escribo un printf, pero a la hora de hacerlo con el ensamblador, me sale un error, no se si es por el codigo, el cual no me dice de algun error al compilar, si es ebx en vez de eax, si la direccion es incorrecta en mov... y es la primera vez que intento manejar asm, solo he leido un poco de algunos libros, por eso es que no tengo mucha idea de que podria ser

alguien me puede ayudar... les dejo la tabla de lo que me dice olly, a ver si me pueden aclarar un poco mas sobre el manejo de asm con ese problema

CPU Disasm
Address   Hex dump          Command                                  Comments
004012D0  /$  55            PUSH EBP                                 ; funcion.004012D0(guessed void)
004012D1  |.  89E5          MOV EBP,ESP
004012D3  |.  83EC 08       SUB ESP,8
004012D6  |.  C70424 003040 MOV DWORD PTR SS:[LOCAL.2],OFFSET funcio ; /format => "hola"
004012DD  |.  E8 4E080000   CALL <JMP.&msvcrt.printf>                ; \MSVCRT.printf
004012E2  |.  C9            LEAVE
004012E3  |.  31C0          XOR EAX,EAX
004012E5  \.  C3            RETN
004012E6      8D76 00       LEA ESI,[ESI]
004012E9      8DBC27 000000 LEA EDI,[EDI]
004012F0  /$  55            PUSH EBP
004012F1  |.  B8 10000000   MOV EAX,10
004012F6  |.  89E5          MOV EBP,ESP
004012F8  |.  83EC 08       SUB ESP,8
004012FB  |.  83E4 F0       AND ESP,FFFFFFF0                         ; DQWORD (16.-byte) stack alignment
004012FE  |.  E8 CD070000   CALL 00401AD0                            ; Allocates 16. bytes on stack
00401303  |.  E8 78040000   CALL 00401780                            ; [funcion.00401780
00401308  |.  90            NOP
00401309  |.  8DB426 000000 LEA ESI,[ESI]
00401310  |>  E8 BBFFFFFF   /CALL 004012D0                           ; [funcion.004012D0
00401315  |.  C70424 E80300 |MOV DWORD PTR SS:[LOCAL.6],3E8          ; /Time => 1000. ms
0040131C  |.  E8 67080000   |CALL <JMP.&KERNEL32.Sleep>              ; \KERNEL32.Sleep
00401321  |.  83EC 04       |SUB ESP,4
00401324  \.^ EB EA         \JMP SHORT 00401310


salu2
.                                 

Eternal Idol

La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón