linux 写入系统调用不会打印寄存器中的字符

xbp102n0  于 2023-05-06  发布在  Linux
关注(0)|答案(1)|浏览(101)

我想打印AAAA,如下所示:

BITS 32;

;write;
 push 0x41414141;
 pop ecx        ;
 mov eax, 4     ; write is syscall 4 for Ubuntu 32-bit
 mov ebx, 1     ; stdout
 mov edx, 4     ;
 int 0x80       ;

;exit;
 mov eax, 1     ;
 mov ebx, 0     ;
 int 0x80       ;

然而,一旦组装和链接这些代码只存在,没有错误,有什么问题吗?

rks48beu

rks48beu1#

快速修复您的代码:

push 0x41414141 ; put 'AAAA' into stack memory
mov ecx,esp     ; pointer to the 'AAAA'
mov eax, 4      ; write is syscall 4 for 32-bit Linux
mov ebx, 1      ; stdout
mov edx, 4
int 0x80
add esp,4      ; restore stack

没有解释,因为你应该首先检查我在评论中问了什么,然后修复将是显而易见的,或者你将不得不问一些你不明白的事情……
如果使用strace ./my_program运行原始代码,您会看到write()返回-EFAULT,因为您传递了一个错误的地址。总是使用strace来调试产生系统调用并且行为不符合预期的程序。

相关问题