Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 如何强制gdb将plt地址解析为反汇编输出中的名称?_Linux_Assembly_Gdb_Elf - Fatal编程技术网

Linux 如何强制gdb将plt地址解析为反汇编输出中的名称?

Linux 如何强制gdb将plt地址解析为反汇编输出中的名称?,linux,assembly,gdb,elf,Linux,Assembly,Gdb,Elf,我得到了一份工作。在使用gdb加载和启动它之后,我发现在disass输出中call指令总是显示plt地址而不是plt名称。在以下示例中,显示的是地址0x8048430,而不是其函数名printf() 具有以下输出: [DEBUG] got:setbuf=0x8049fdc [DEBUG] got:strcmp=0x8049fe0 [DEBUG] got:printf=0x8049fe4 <===================== [DEBUG]获得:setbuf=0x8049fdc

我得到了一份工作。在使用gdb加载和启动它之后,我发现在
disass
输出中
call
指令总是显示plt地址而不是plt名称。在以下示例中,显示的是地址
0x8048430
,而不是其函数名
printf()

具有以下输出:

[DEBUG] got:setbuf=0x8049fdc
[DEBUG] got:strcmp=0x8049fe0 
[DEBUG] got:printf=0x8049fe4 <=====================
[DEBUG]获得:setbuf=0x8049fdc
[调试]获取:strcmp=0x8049fe0

[DEBUG]get:printf=0x8049fe4二进制文件是否有调试符号,因此
objdump-drwC-Mintel
将其解析为
printf@plt
?(如果你喜欢AT&T语法,也可以省略
-Mintel
。@PeterCordes这很奇怪
objdump-drwC-Mintel
输出
调用8048430
而不是
printf@plt
好的,所以我认为pwntools必须为您做更多的反向工程,也许可以追踪PLT并找到它使用的条目。GDB没有这样做。目标符号名称必须存在,以便进行动态链接,但PLT条目本身只是代码,不需要这些标签上的符号。GDB是为调试您使用调试信息编译的代码而设计的(并且工作得很好),而不是为反向工程而设计的。@PeterCordes谢谢。我发现IDA免费软件在反编译二进制文件方面有很好的功能,我将使用它。你的二进制文件是否有调试符号,所以
objdump-drwC-Mintel
将其解析为
printf@plt
?(如果你喜欢AT&T语法,也可以省略
-Mintel
。@PeterCordes这很奇怪
objdump-drwC-Mintel
输出
调用8048430
而不是
printf@plt
好的,所以我认为pwntools必须为您做更多的反向工程,也许可以追踪PLT并找到它使用的条目。GDB没有这样做。目标符号名称必须存在,以便进行动态链接,但PLT条目本身只是代码,不需要这些标签上的符号。GDB是为调试您使用调试信息编译的代码而设计的(并且工作得很好),而不是为反向工程而设计的。@PeterCordes谢谢。我发现IDA免费软件在反编译二进制文件方面有很好的功能,我打算改用它。
[DEBUG] got:setbuf=0x8049fdc
[DEBUG] got:strcmp=0x8049fe0 
[DEBUG] got:printf=0x8049fe4 <=====================