gpt4 book ai didi

Linux 汇编 x86 |试图获取堆栈值,语法错误

转载 作者:太空宇宙 更新时间:2023-11-04 05:25:57 24 4
gpt4 key购买 nike

我一直在 x86 机器上搞乱 Linux 程序集,基本上我的问题是:我已将几个值推送到堆栈中,将堆栈指针移动到基指针中,并将值 8 移动到寄存器中以获取推送的值,最后我想获取该值并将其放入 %ebx 中进行系统调用,这样我就可以获得该值,但似乎出现错误。不知道为什么。错误是:注册后出现垃圾 (%ebp)示例:

.section .data
.section .text
.globl _start
_start:
pushl $50
pushl $20
movl %esp,%ebp
movl $8,%edx
movl %edx(%ebp),%ebx ## Supposed to be return value at system termination // PROBLEM HERE
movl $1,%eax ## System call
int $0x80 # Terminate program

最佳答案

我认为部分问题可能是在 x86 中,堆栈实际上是向下增长的,而不是向上增长的。您正在向基指针添加内容,这会产生垃圾,您必须从中减去。我没有 x86 机器,因此无法对此进行测试,但是您尝试过 movl -%edx(%ebp),%ebx 吗?

哎呀,我脑子里操作数的方向颠倒了。在这种情况下,您的堆栈如下所示:

1952 - ???
1948 - 20
1944 - 50 <- ebp <- esp

因此,当您采用 ebp+8 时,您得到的不是 20,而是地址 1952,而且您不知道其中包含什么。

关于Linux 汇编 x86 |试图获取堆栈值,语法错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32003138/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com