gpt4 book ai didi

c - 此时代码中 %esp 的值应该是多少?

转载 作者:行者123 更新时间:2023-11-30 15:40:16 26 4
gpt4 key购买 nike

我一直无法让这段代码正常工作。

test    $0x10000000, %esp
jz .ERROR
ret

如果跳转到.ERROR,代码就会退出。否则输出将正常打印。

当我使用 test $0x0000000, %esp 时,它会按我的预期退出。

这些是我的部分:

Sections:
Idx Name Size VMA LMA File off Algn
0 .interp 00000013 08048114 08048114 00000114 2**0
CONTENTS, ALLOC, LOAD, READONLY, DATA
1 .note.ABI-tag 00000020 08048128 08048128 00000128 2**2
CONTENTS, ALLOC, LOAD, READONLY, DATA
2 .hash 00000038 08048148 08048148 00000148 2**2
CONTENTS, ALLOC, LOAD, READONLY, DATA
3 .dynsym 00000090 08048180 08048180 00000180 2**2
CONTENTS, ALLOC, LOAD, READONLY, DATA
4 .dynstr 00000064 08048210 08048210 00000210 2**0
CONTENTS, ALLOC, LOAD, READONLY, DATA
5 .gnu.version 00000012 08048274 08048274 00000274 2**1
CONTENTS, ALLOC, LOAD, READONLY, DATA
6 .gnu.version_r 00000020 08048288 08048288 00000288 2**2
CONTENTS, ALLOC, LOAD, READONLY, DATA
7 .rel.dyn 00000010 080482a8 080482a8 000002a8 2**2
CONTENTS, ALLOC, LOAD, READONLY, DATA
8 .rel.plt 00000030 080482b8 080482b8 000002b8 2**2
CONTENTS, ALLOC, LOAD, READONLY, DATA
9 .init 00000024 080482e8 080482e8 000002e8 2**2
CONTENTS, ALLOC, LOAD, READONLY, CODE
10 .plt 00000070 08048310 08048310 00000310 2**4
CONTENTS, ALLOC, LOAD, READONLY, CODE
11 .text 00000188 08048380 08048380 00000380 2**4
CONTENTS, ALLOC, LOAD, READONLY, CODE
12 .springboard 00000023 08048508 08048508 00000508 2**0
CONTENTS, ALLOC, LOAD, READONLY, CODE
13 .fini 00000015 0804852c 0804852c 0000052c 2**2
CONTENTS, ALLOC, LOAD, READONLY, CODE
14 .rodata 00000024 08048544 08048544 00000544 2**2
CONTENTS, ALLOC, LOAD, READONLY, DATA
15 .eh_frame 000000e0 08048568 08048568 00000568 2**2
CONTENTS, ALLOC, LOAD, READONLY, DATA
16 .dynamic 000000c8 08049648 08049648 00000648 2**2
CONTENTS, ALLOC, LOAD, DATA
17 .got 00000004 08049710 08049710 00000710 2**2
CONTENTS, ALLOC, LOAD, DATA
18 .got.plt 00000024 08049714 08049714 00000714 2**2
CONTENTS, ALLOC, LOAD, DATA
19 .data 00000004 08049738 08049738 00000738 2**2
CONTENTS, ALLOC, LOAD, DATA
20 .bss 00000004 0804973c 0804973c 0000073c 2**2
ALLOC
21 .comment 0000002a 00000000 00000000 0000073c 2**0
CONTENTS, READONLY

也许我还不明白这一点,但是 %esp 应该等于该范围内的地址吗?

如果我将 .springboard 部分与链接器脚本链接,我可以将其移动到 0x10000000。返回到跳板部分。所以我的想法是它不应该在这里工作,但是如果我将它与我的脚本链接并且跳板部分被移动,那么它就会工作。为什么它在这两种情况下都有效?

我猜测测试返回一个非零值,但我不明白为什么。

最佳答案

不,esp是一个堆栈指针,所以它应该指向堆栈内的某个地址。你的程序似乎没有提供任何堆栈部分,所以我猜操作系统分配了堆栈。

好吧,如果您要从函数返回,dword ptr [esp](但不是 esp)确实应该包含上述部分中的地址,因为这应该是函数调用后要执行的下一条指令。

关于c - 此时代码中 %esp 的值应该是多少?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21081300/

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