首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何计算存储的弹性公网EIP地址

如何计算存储的弹性公网EIP地址
EN

Stack Overflow用户
提问于 2013-05-31 08:22:58
回答 1查看 5K关注 0票数 3

正如标题所说,我正在尝试获取帧中存储的弹性公网in的地址。对于这个简单的程序:

代码语言:javascript
复制
func1(int a, int b)
{
        int x = 1;
}

int main(void)
{
        func1(1,2);
}

我的gdb反汇编是:

代码语言:javascript
复制
(gdb) disassemble main
Dump of assembler code for function main:
0x08048430 <main+0>:    push   %ebp
0x08048431 <main+1>:    mov    %esp,%ebp
0x08048433 <main+3>:    sub    $0x8,%esp
0x08048436 <main+6>:    add    $0xfffffff8,%esp
0x08048439 <main+9>:    push   $0x2
0x0804843b <main+11>:   push   $0x1
0x0804843d <main+13>:   call   0x8048410 <func1>
0x08048442 <main+18>:   add    $0x10,%esp
0x08048445 <main+21>:   mov    %ebp,%esp
0x08048447 <main+23>:   pop    %ebp
0x08048448 <main+24>:   ret
End of assembler dump.

从GDB打印的堆栈帧:

代码语言:javascript
复制
(gdb) info frame
Stack level 0, frame at 0xffbfdda0:
 eip = 0x8048416 in func1 (t.c:3); saved eip 0x8048442
 called by frame at 0xffbfddc0
 source language c.
 Arglist at 0xffbfdd98, args: a=1, b=2
 Locals at 0xffbfdd98, Previous frame's sp is 0xffbfdda0
 Saved registers:
  ebp at 0xffbfdd98, eip at 0xffbfdd9c

info框不提供保存的eip的地址,它只显示保存的eip的值。

我在func1上设置了一个断点,然后打印了帧信息。保存的弹性公网EIP的值为0x8048442,对应于反汇编中的。我很困惑,如何计算弹性公网EIP(0x8048442)所在的地址?

我已经检查了地址0x8048412(0x8048416 - 4),但它不包含保存的EIP地址。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-05-31 08:32:36

您需要检查arg列表之前的区域。它告诉你:eip at 0xffbfdd9c

该地址在arg list - 0xffbfdd98之前4个字节。请记住,列表会向下增长,因此“x前4个字节”表示"x+4“。

saved eip 0x8048442信息是关于EIP指向的位置,它在文本部分,而不是堆栈中。

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16847979

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档