gpt4 book ai didi

linux - elf-loader如何知道stderr和stdout的地址

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

我正在反汇编一个非常简单的ELF程序(Linux x86)。
使用 IDA PRO 软件,我在 .bss 部分看到了 stdoutstderr。而且我还没有找到任何设置 stdoutstderr 值的东西。它是如何工作的?
stdoutstderr 是否为空?

最佳答案

So you mean stdout and stderr should always be at the same memory address in .bss

.bss 开始到 stdoutstderr 的偏移量在静态链接时确定。

.bss 的起始地址受 ASLR(堆放置随机化)影响。因此,对于给定的二进制文件,stdout 的地址可能会随运行而变化。

how IDA pro knows this item in .bss is stdout or stderr

可以知道的唯一方法是通过符号表。您应该在输出中看到它:

readelf -Ws ./a.out | egrep 'stdout|stderr'
nm ./a.out | egrep 'stdout|stderr'
nm -D ./a.out | egrep 'stdout|stderr'

更新:

but what happens if symbol table is stripped

有两种情况需要考虑:全静态链接和动态链接。

在完全静态的情况下,所有对stderr 的引用都可以完全删除,IDA pro 将不知道知道stderr 在哪里。

在动态链接的情况下,有两个符号表:“常规”表(由 nm 显示)和动态表(由 nm -D 显示) ). Strip 将删除常规符号表(因为删除动态符号表没有任何意义——没有它,可执行文件将无法运行)。 IDA pro 然后可以使用 stderr 的动态符号表条目来判断该符号的位置。

关于linux - elf-loader如何知道stderr和stdout的地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38101359/

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