汇编系统调用无效

assembly system call non-effective

我想用以下内容打印 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       ;

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

快速修复您的代码:

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() return -EFAULT 因为您传递了错误的地址。始终使用 strace 调试进行系统调用但行为不符合预期的程序。