gpt4 book ai didi

c - 在文本部分查找字符串

转载 作者:太空狗 更新时间:2023-10-29 15:21:46 27 4
gpt4 key购买 nike

我以下面的代码为例:

Foo( "Test1" );

void Foo(const char* const i_Test )
{
// Some logic
}

Foo() 中的 i_Test 指针持有指向 .rodata 部分 中的字符串的指针。

有没有办法在二进制文件中搜索i_Text指针值来找到相关的String?或者我可以使用将保存该信息的 gcc 生成任何调试信息吗?

最佳答案

如果您谈论的是 ELF 文件格式,常量字符串存储在 .rodata (read-only-data) 部分.基本上,只有程序的指令(代码)存储在该二进制文件的 .text 部分。您可以使用对象转储程序(例如 objdump)调查这些部分,如下所示:

objdump -drS program.o           // to see .text section of your program

objdump -s -j .rodata program.o // to see .rodata section of your program

在上面的示例代码中,您传递给 Foo 函数的 "Test1" 字符串将被 编译器< 视为常量字符串/em>。因此,您可以在加载阶段之前找到它的相对内存地址,i_Test 指针将指向这个常量字符串。但是,如果您将代码编译为 position independent (通过使用 gcc 中的 -fPIC 选项),您可能还会发现编译器会向该只读 writable 属性添加 strong>.rodata 部分。此外,您还可以使用 readelf用于显示有关 ELF 格式目标文件各部分的详细信息的二进制实用程序。

可以找到有关 ELF 文件格式的更多信息 here

关于c - 在文本部分查找字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29935915/

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