gpt4 book ai didi

debugging - ELF 文件 - 获取字符串使用位置的函数

转载 作者:行者123 更新时间:2023-12-05 03:07:45 29 4
gpt4 key购买 nike

我有一个 elf 文件,我想知道是否有可能获得一些关于在可执行文件中使用变量(字符串)的信息。

如果我打印出 .elf 的字符串,我发现一个有趣的字符串,我想知道它在哪个函数中使用,这是否可能?

谢谢!

最佳答案

让我们考虑以下示例:

测试.c

#include <stdlib.h>
#include <stdio.h>

int
main(int argc, char *argv[])
{
char *str_a = "a";
char *str_abc = "abc";

printf("%s\n", str_a);
printf("%s\n", str_abc);

exit(EXIT_SUCCESS);
}

让我们编译它:gcc -Wall -pedantic-errors -o ~/test ~/test.c

这将生成名为 test 的文件。

让我们检查一下 .rodata 部分:readelf -x .rodata ./test

输出如下:

Hex dump of section '.rodata':
0x00400610 01000200 61006162 6300 ....a.abc.

显示起始地址 0x00400610四个 点显示在第一个字符串常量之前,因此字符串a 的地址将为0x00400614。跳过a和空字节(定界符)会跳过2字节,abc的地址将是0x00400616。所以,此时,这两个地址是已知的。

接下来,让我们执行objdump -M intel -d ./test

这是 .text 部分中的 main list :


0000000000400546 <main>:
400546: 55 push rbp
400547: 48 89 e5 mov rbp,rsp
40054a: 48 83 ec 20 sub rsp,0x20
40054e: 89 7d ec mov DWORD PTR [rbp-0x14],edi
400551: 48 89 75 e0 mov QWORD PTR [rbp-0x20],rsi
400555: 48 c7 45 f8 14 06 40 mov QWORD PTR [rbp-0x8],<b>0x400614</b>
40055c: 00
40055d: 48 c7 45 f0 16 06 40 mov QWORD PTR [rbp-0x10],<b>0x400616</b>
400564: 00
400565: 48 8b 45 f8 mov rax,QWORD PTR [rbp-0x8]
400569: 48 89 c7 mov rdi,rax
40056c: e8 9f fe ff ff call 400410 <puts@plt>
400571: 48 8b 45 f0 mov rax,QWORD PTR [rbp-0x10]
400575: 48 89 c7 mov rdi,rax
400578: e8 93 fe ff ff call 400410 <puts@plt>
40057d: bf 00 00 00 00 mov edi,0x0
400582: e8 b9 fe ff ff call 400440 <exit@plt>
400587: 66 0f 1f 84 00 00 00 nop WORD PTR [rax+rax*1+0x0]
40058e: 00 00

所以,从 list 中可以很清楚地看出这两个字符串是如何显示在屏幕上的。该 list 提到了上面找到的两个地址 - 它们已突出显示。

所以,总而言之,您可以检查 .rodata 部分,找到特定字符串的位置地址,然后只需 grep 查找在 .text 部分中找到的地址.

关于debugging - ELF 文件 - 获取字符串使用位置的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46572974/

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