gokernel
(usa Linux Mint)
Enviado em 10/08/2013 - 19:08h
BUG encontrado, e já resolvido. ;)
// Linha que resolve o problema:
// 83 c4 08 add $0x8,%esp
//
g(a,0x83); g(a,0xc4); g(a,0x08);
// a funcao correta seria assim:
void _ext_print (ASM *a)
{
int i;
if (lex() == TYPE_VARIABLE && (i=cs_VarFind(token)) != -1)
{
// 8: 83 ec 08 sub $0x8,%esp
g(a,0x83); g(a,0xec); g(a,0x08);
g(a,0xa1); asm_get_addr(a, &var[i].value.i);
// argument 2
//
// 89 44 24 04 mov %eax,0x4(%esp)
//
g(a,0x89); g(a,0x44); g(a,0x24); g(a,0x04);
g(a,0xa1); asm_get_addr(a, &s);
// argument 1:
//
// 89 04 24 mov %eax,(%esp)
//
g(a,0x89); g(a,0x04); g(a,0x24);
// call
// b8 7a 13 40 00 mov $0x40137a,%eax
// ff d0 call *%eax
//
g(a,0xb8); asm_get_addr(a, printf);
g(a,0xff); g(a,0xd0);
// 83 c4 08 add $0x8,%esp
//
g(a,0x83); g(a,0xc4); g(a,0x08);
}
}