我在寻找替代的readelf和objdump二重奏使用Visual Studio编译C++源代码和调查时lib,obj和dll.
我知道MinGW提供了这个工具的移植,但我正在寻找官方支持Microsoft C++ ABI的东西.
如果这件事,我正在使用Visual Studio 2012.
谢谢.
我在Linux上执行了命令“readelf -h test”(“test”是我的二进制程序),并得到以下文本:
ELF header:
Magic: 7f 45 4c 46 ....
Data: 2's complement, little endian
...
**Flags: 0x1007, noreorder, pic, cpic, o32, mips1**
...
Run Code Online (Sandbox Code Playgroud)
您能详细告诉我上面文字中各个标志的含义吗?
我用谷歌搜索过,但找不到答案。任何意见将不胜感激。
在可执行文件上使用 readelf 时,我在一些符号名称后的括号中得到一个数字。例如:
Num: Value Size Type Bind Vis Ndx Name
49: 00000000002052a0 8 OBJECT GLOBAL DEFAULT 27 stderr@GLIBC_2.2.5 (3)
Run Code Online (Sandbox Code Playgroud)
(3)在这种情况下,stderr 的符号名称后面有一个。这是什么意思?
readelf -l /bin/bash 给我这个:
程序标题:
类型偏移VirtAddr PhysAddr
FileSiz MemSiz标志对齐
PHDR 0x0000000000000040 0x0000000000400040 0x0000000000400040
0x00000000000001f8 0x00000000000001f8 RE 8
INTERP 0x0000000000000238 0x0000000000400238 0x0000000000400238
0x000000000000001a 0x000000000000001a R 1
[请求程序解释器:/lib/ld-linux-x86-64.so.2]
加载0x0000000000000000 0x0000000000400000 0x0000000000400000
0x00000000000aeef4 0x00000000000aeef4稀土200000
加载0x00000000000afde0 0x00000000006afde0 0x00000000006afde0
0x0000000000003cec 0x000000000000d3c8 读写200000
动态0x00000000000afdf8 0x00000000006afdf8 0x00000000006afdf8
0x0000000000000200 0x0000000000000200读写8
注意0x0000000000000254 0x0000000000400254 0x0000000000400254
0x0000000000000044 0x0000000000000044 R 4
GNU_EH_FRAME 0x000000000009dbc0 0x000000000049dbc0 0x000000000049dbc0
0x0000000000002bb4 0x0000000000002bb4 R 4
GNU_STACK 0x0000000000000000 0x0000000000000000 0x0000000000000000
0x0000000000000000 0x0000000000000000读写8
GNU_RELRO 0x00000000000afde0 0x00000000006afde0 0x00000000006afde0
0x0000000000000220 0x0000000000000220 R 1
为什么在某些细分市场中MemSiz不等于?包含但不包含的存储区应该怎么办?FileSizLOADMemSizFileSiz
我正在处理一个大型可执行文件,我没有源代码(长篇故事).
我想从中提取几个函数的二进制代码 - 并尝试从我自己的程序中调用它们.我正在寻找的函数都是从相同的源文件(在Linux上使用gcc)编译的,如果重要的话.
我可以使用objdump看到函数的二进制代码.有没有什么方法可以说服工具转储函数的二进制代码 - 没有别的东西,没有拆解?
基本上,如果定义函数的C文件被称为foo.c,我想得到foo.o(我实际上更喜欢foo.So,但这不会存在于可执行文件中).可以用objdump,readelf或其他一些方法完成吗?
如果重要的话,这些功能是独立的.
谢谢!
我有一个十六进制偏移量,比如说0xcccddd。使用gdb info symbol 0xcccdddI 可以获得符号名称,例如fn()在section_name.
如何使用readelf或objdump命令或任何其他命令而不运行 gdb 来执行此操作?
编辑: 使用以下命令后
objdump -d --start-address 0xcccddd --stop-address 0xcccdde filename.axf
Run Code Online (Sandbox Code Playgroud)
我正进入(状态
filename.axf: file format elf32-little
objdump: can't disassemble for architecture UNKNOWN!
Run Code Online (Sandbox Code Playgroud) 我需要更改共享库 (.so) 文件中的某些符号,如下例所示:我需要将abc.so 文件中的符号重命名为 symbol xyz。我有一个工具可以在头文件中替换它,我面临的唯一挑战是更改我的 .so 共享库。对于共享库,是否有任何工具或命令可以帮助我反汇编 .so 文件、更新符号并再次重新组装为 .so 文件?对于共享库,我们需要一种重建符号表的机制。如果有任何工具可以完成我的任务,需要帮助吗?
仅供参考:更改源是最好的方法,但对于短期的解决方案来说,它可以帮助在符号级别替换代码字。