From: Floyd, P. <pj...@wa...> - 2023-04-18 16:34:19
|
On 18/04/2023 17:46, folkert wrote: > The 2 calls it does are: > > print_char: > movb (%esi), %al > movb %al, buffer > movl $4, %eax > movl $1, %ebx > movl $buffer, %ecx > movl $1, %edx > int $0x80 > ret > > exit: > movl $1, %eax > movl $0, %ebx > int $0x80 Valgrind can't run just any executable binary. It has quite a lot of hard coded limitations that correspont (mostly) to what compilers and link editors will produce. So if you use assembler and use opcodes not normally generated by compilers then it won't work. The code that handles this is case 0xCD: /* INT imm8 */ d64 = getUChar(delta); delta++; /* Handle int $0xD2 (Solaris fasttrap syscalls). */ if (d64 == 0xD2) { jmp_lit(dres, Ijk_Sys_int210, guest_RIP_bbstart + delta); vassert(dres->whatNext == Dis_StopHere); DIP("int $0xD2\n"); return delta; } goto decode_failure; So int 0x80 results in a decode error. Can you use syscall? A+ Paul |