GDB CallStack地址是虚拟的还是物理的?
我的gdb bt callstack提供功能地址的功能名称.然后我做了nm binary 并生成函数名称和地址映射.当我尝试将GDB地址与nm输出匹配时,它与不匹配. (gdb) bt中的功能地址太高(看起来像物理地址). gdb函数地址(例如0x00007fffe6fc150f): #9 0x00007fffe6fc150f in read_alias_file (fname=, fname_len=) at localealias.c:224 #10 0x00007fffe6fc1a4e in _nl_expand_alias (name=0x7fffffffed04 "en_IN") at localealias.c:189 #11 0x00007fffe6fbb62f in _nl_find_locale (locale_path=0x7fffe70df580 "/usr/lib/l
4 2023-11-19
编程技术问答社区
nm符号值中的偏移?
只是为您提供一些上下文,这是我要实现的目标: 我将const char*嵌入共享对象文件中,以便在.so文件本身中具有版本字符串.我正在进行数据分析,此字符串使我能够让数据知道该软件生成的版本.这一切都很好. 我遇到的问题是,当我尝试直接从.so库中读取字符串时.我试图使用 nm libSMPselection.so | grep _version_info 并获得 000000000003d968 D __SMPselection_version_info 这一切都很好,并且正如预期的那样(char*称为_smpselection_version_info). 但是,我本来希望现在能够打开文件,寻求0x3d968并开始阅读我的字符串,但我所得到的只是垃圾. 当我打开.so文件并简单地搜索字符串的内容(我知道它是如何启动)时,我可以在地址0x2e0b4中找到它.在此地址上,它在那里,零终止和预期. (我目前正在使用此方法.) 我不是计算机科学家.有人
4 2023-11-08
编程技术问答社区
图书馆依赖性的工具
我正在寻找tool/command Unix平台以检测library .so和.o文件的依赖项. 我已经使用了ldd/nm/truss,但我不知道检测库依赖的正确方法. 解决方案 这取决于"检测库依赖关系"的确切含义. ldd 命令在共享库上工作,而不仅仅是在可执行文件上.它将显示构建库时声明的共享库的依赖项: $ ldd /usr/lib/libgtk-3.so linux-vdso.so.1 (0x00007ffff8fff000) libgdk-3.so.0 => /usr/lib/libgdk-3.so.0 (0x00007f43fcf47000) libgmodule-2.0.so.0 => /usr/lib/libgmodule-2.0.so.0 (0x00007f43fcd43000) libpangocairo-1.0.so.0 => /usr/lib/libpangocairo-1.0.so.0 (0x00007
4 2023-11-08
编程技术问答社区
在运行时出现符号查询错误,尽管纳米报告说有符号存在
我这样构建我的程序: g++ -std=c++11 myprog.cpp -o myprog -lqpid-proton-cpp 然后我运行./myprog并获得此错误: symbol lookup error: ./myprog: undefined symbol: _ZN6proton10event_loop6injectESt8functionIFvvEE 然而,NM报告该符号存在于库中. . . nm -D /usr/lib/libqpid-proton-cpp.so | grep _ZN6proton10event_loop6injectESt8functionIFvvEE . . .产量: 000000000002f460 T _ZN6proton10event_loop6injectESt8functionIFvvEE 我在这里缺少什么? 解决方案 您是否验证了,例如使用ldd myprog,您查看了正确的共享对象?有可能找到
8 2023-11-06
编程技术问答社区
每个未定义的符号都与它所来自的库名有关吗?
假设liba.so依赖于libb.so,libc.so,libd.so.是否有未定义的符号和所需库名称之间的映射: undefined_symbol_1 comes from libB.so undefined_symbol_2 comes from libC.so undefined_symbol_3 comes from libC.so undefined_symbol_4 comes from libC.so undefined_symbol_5 comes from libD.so 或它们只是单独保存: Undefined symbols: undefined_symbol_1, undefined_symbol_2, undefined_symbol_3, undefined_symbol_4, undefined_symbol_5; Required libraries: "libB.so", "libC.so", "libD.so"; 系统:ubuntu
12 2023-11-01
编程技术问答社区
为库中的C++模板实例强制定义符号
我想提供一个提供模板代码的库.但是,当我可以猜测我的模板的不同类型的使用情况时,我也想将此代码的所有权(生成代码)保留.这是我要做的示例: lib1.h #include template void print_me() { std::cout (); template void print_me(); 我使用: 编译我的库 g ++ -shared -fpic lib1.cpp -o lib1.so 当我使用库时: main.cpp #include int main() { p
14 2023-10-15
编程技术问答社区
当我在Mac上使用nm查看符号列表时,$ld$add$os10.4$前缀是什么意思?
我的iPhone应用程序没有链接iPhone模拟器的问题.它告诉我有未定义的符号: Undefined symbols for architecture i386: ".objc_class_name_NSRunLoop", referenced from: pointer-to-literal-objc-class-name in SampleBrowser.cpp.o ".objc_class_name_NSDate", referenced from: pointer-to-literal-objc-class-name in SampleBrowser.cpp.o ".objc_class_name_NSAutoreleasePool", referenced from: pointer-to-literal-objc-class-name in SampleBrowser.cpp.o pointer-to-lit
12 2023-10-12
编程技术问答社区
相当于微软的nm命令
我长期以来使用Cygwin的NM命令来完成我所有的.lib符号调试需求,但是最近我考虑在SO答案中引用它,并意识到大多数Windows开发人员都没有安装Cygwin. 那么,microsoft等于nm,即,什么命令将列出.lib文件导出的符号,.lib中的未定义符号等等? 对于好奇的是,示例nm man页面是在这里. 解决方案 尝试dumpbin.exe. msdn dumpbin.exe . 其他解决方案 运行vcvarsall.bat可能会在您的Microsoft Visual Studio的安装路径中存在.这设置了dumpbin.exe. 所需的环境变量 D:>"D:\Program Files (x86)\Microsoft Visual Studio 10.0\vcvarsall.bat" x86 然后使用dumpbin.exe.例如dumpbin.exe /ALL 给出所有符号. 其他解决方案 nm命
6 2023-10-12
编程技术问答社区
如何将llvm::outs()重定向到文件?
我将一些LLVM工具(例如llvm-nm)用作静态库. IE.我复制了源llvm-nm.cpp,将main(..)重命名为llvm_nm(..),并将其编译为静态库.我想将标准输出转发到我的文件. 我尝试使用下一种方法: int out_fd, err_fd; fpos_t out_pos, err_pos; // redirect out fflush(stdout); fgetpos(stdout, &out_pos); out_fd = dup(fileno(stdout)); freopen(outFilename, "w", stdout); // execute int ret = llvm_nm(argc_, argv_); // restore output fflush(stdout); dup2(out_fd, fileno(stdout)); close(out_fd); clearer
8 2023-09-30
编程技术问答社区
指的是一堆明显存在的未解决的OpenSSL符号的错误?
我正在构建一个共享库(我们将其称为" foo"),该库利用另一个库(我们将其称为" bar"). " bar"利用了OpenSSL的某些功能. 这是问题表面的地方. " bar"被编译为静态库,看来Openssl也是如此.因此,当我链接库(" foo")时,我包括: " foo"的对象文件 静态库libbar.a openssl静态库libcrypto.a和libssl.a 构建命令看起来像这样: g++ -Wl,-soname,libfoo.so -shared file1.o file2.o libbar.a \ libcrypto.a libssl.a -o libfoo.so 但是,我遇到了很多错误: ld: ./obj/libbar.a(file1.c.o): in function initialize_openssl: ssl.c:117: error: undefined reference to 'SSL_librar
4 2023-09-29
编程技术问答社区
功能地址在nm输出和gdb中是不同的
让我们只关注Rect_IsEmpty()函数. nm命令给我这个输出: (...) 00021af0 T Rect_IsEmpty (...) 另一方面,当我启动gdb并查看此功能的地址时,我会得到: (gdb) info address Rect_IsEmpty Symbol "Rect_IsEmpty" is at 0x8057c84 in a file compiled without debugging. 请任何人解释为什么这些地址不一样? GDB从哪里获得此地址? 解决方案 nm给您杂交的名称符号表的地址偏移,而gdb则为您提供实际虚拟过程的内存地址,每次运行该过程时都会更改. (在GDB中run或start之前,它使用与nm相同的方法来获取符号地址,使用PIE可执行文件中的同一占位符基础地址.) nm只是一种工具,它显示您从代码段的开头偏移.在您的情况下: 00021af0 t rect_isempty 只是意味着,
170 2023-06-19
编程技术问答社区
无法在二进制中找到.dtors和.ctors
我正在阅读《黑客攻击》,《剥削艺术》.在书中有一个部分解释了.dtors和.ctors的使用. 我正在尝试重现本书的练习之一,但是在我的可执行文件中,我没有这些部分.起初,我认为问题是我正在编译64位,但是现在我要编译32位,.dtors和.ctors仍未出现在部分表中.这是代码: #include #include static void miConstructor(void) __attribute__ ((constructor)); static void miDestructor(void) __attribute__ ((destructor)); int main(void) { printf("En main() \n"); return 0; } void miConstructor(void) { printf("En el constructor\n"); } void miDestructor(void
38 2023-03-30
编程技术问答社区
你在Mac OS X中最喜欢的反汇编工具是什么?
我正在使用otool,nm和Fraise文本编辑器来拆卸Mach-o二进制文件.此时我的工作流程非常简单: 1.列出存在的符号. nm -g 2.获取灾难代码. otool -vt 3.将此输出复制并粘贴到文本文件中. 4.阅读和评论文本编辑器中的代码:) 我正在寻找用Mac OS X上的灾难代码工作的工具. 解决方案 您可能想尝试 hopper disassembler , osxdbg , otx (otool gui) 和 affinic debugger gui gui . 其他解决方案 我知道 http://www.hopperapp.com/,但从未使用过它. (不能将其与IDA(PRO)) 进行比较
12 2023-03-16
编程技术问答社区
如何打印像nm那样的ELF文件的符号名称?
我知道符号的名称在shstrtab中. 但是我没有如何抓住他们. 我应该将shstrab放入elf64_sym中,以便可以使用st_name吗? Elf64_Shdr *shdr = (Elf64_Shdr *) (data + elf->e_shoff); Elf64_Shdr *symtab; Elf64_Shdr *shstrtab; Elf64_Shdr *strtab; char *str = (char *) (data + shdr[elf->e_shstrndx].sh_offset); for (int i = 0; i e_shnum; i++) { if (shdr[i].sh_size) { printf("%s\n", &str[shdr[i].sh_name]); if (strcmp(&str[shdr[i].sh_name], ".symtab") ==
26 2023-03-08
编程技术问答社区
为什么/lib32/libc.so。6有两个��fopen公司�� 里面有符号?
nm -D /lib32/libc.so.6 | grep '\' 0005d0c0 T fopen 00109750 T fopen readelf -s /lib32/libc.so.6 | egrep '0005d0c0|00109750' 181: 0005d0c0 50 FUNC GLOBAL DEFAULT 12 fopen@@GLIBC_2.1 182: 00109750 136 FUNC GLOBAL DEFAULT 12 fopen@GLIBC_2.0 679: 0005d0c0 50 FUNC GLOBAL DEFAULT 12 _IO_fopen@@GLIBC_2.1 680: 00109750 136 FUNC GLOBAL DEFAULT 12 _IO_fopen@GLIBC_2.0 这是我的问题: 为什么/lib32/libc.so.6中有两个fopen符号?应该禁止在同
72 2023-03-08
编程技术问答社区
nm符号值中的偏移?
只是为您提供一些上下文,这是我要实现的目标: 我将const char*嵌入共享对象文件中,以便在.so文件本身中具有版本字符串.我正在进行数据分析,此字符串使我能够让数据知道该软件生成的版本.这一切都很好. 我遇到的问题是,当我尝试直接从.so库中读取字符串时.我试图使用 nm libSMPselection.so | grep _version_info 并获得 000000000003d968 D __SMPselection_version_info 这一切都很好,并且正如预期的那样(char*称为_smpselection_version_info). 但是,我本来希望现在能够打开文件,寻求0x3d968并开始阅读我的字符串,但我所得到的只是垃圾. 当我打开.so文件并简单地搜索字符串的内容(我知道它是如何启动)时,我可以在地址0x2e0b4中找到它.在此地址上,它在那里,零终止和预期. (我目前正在使用此方法.) 我不是计算机科学家.有人
22 2023-03-05
编程技术问答社区
如何确定图书馆之间的依赖关系?
我的项目由几个静态库组成,这些库在最后一步中链接在一起.现在我有一个问题,即图书馆的链接顺序很重要(否则我会收到一个未定义的符号链接器错误).有时我会遇到问题,必须重新分配链接的库(-lcommon -lsetup -lcontrol等).目前,这是一个愚蠢的反复试验:重新分配,编译,检查错误,重新输入,编译等. 所以我写了一个小程序来向我展示图上的依赖性,并为我生成了链接的库顺序.它在定义('t','b'等)和未定义的符号('u')中读取来自 nm 并删除但是我的程序向我展示了循环依赖性...我的错误是什么? 如果它们真的存在,我根本无法联系... 分析NM输出时我错过了什么?还是分析NM输出不是以获取这些依赖项的方式? libcommon.a: U _ZN15HardwareUnit23GetHardwareSerialNumberEv libhardware.a: 00000484 T _ZN15HardwareUnit23GetHardware
22 2023-03-04
编程技术问答社区
在nm输出中,'_GLOBAL__sub_I_'是什么意思?
当我试图解决静态链接中的问题时,我在符号名称前遇到了几个_GLOBAL__sub_I_前缀.它以这种形式出现,尽管我使用了nm --demangle(-C). 我偶然发现了这个答案(如何找到全局静态初始化) .查看我的源代码,确实看起来像是全局静态变量的初始化. 我想知道的是,我在哪里可以提供有关__sub_和其他杂交名称的更多信息,例如__cxxabiv1? 解决方案 为了防止链接腐烂,我将在这里回答,尽管它是 Chris Britt 首先找到信息(请参阅问题的评论). 如果我们看" cxxabi.h文件参考"(2013)我们看到标头定义了两个名称空间:__gnu_cxx和abi.因此,这是我们正在寻找 cxxabi. h文件参考"(2019)指出它是在2009年生成的,几乎是相同的,除了只有abi名称空间. 差异是浅表的, norefollow noreferrer"> head noreferrer "> header subleser 定义命名空间
26 2023-02-27
编程技术问答社区
如何获得结构 "Elf64_Rela "中的符号名称?
#include #include #include #include #include #include #include #include #include #include Elf64_Rela *retab; Elf64_Rela *retab_end; Elf64_Ehdr *ehdr; Elf64_Shdr *shdr; char *strtab; void elf_open(char *filename) { int fd = open(filename, O_RDONLY); struct stat sbuf; fstat(fd, &sbuf); void *maddr = mmap(NULL, sbuf.st_s
60 2023-02-04
编程技术问答社区
nm符号既有 "U "又有 "T",这是什么意思?
我在运行时遇到未定义符号错误,当我在相关库中查找符号时,我得到了结果: nm -C -D /home/farmer/anaconda3/envs/general/lib/python3.6/site-packages/pyscannerbit/libScannerBitCAPI.so | grep empty_ U YAML::detail::node_data::empty_scalar[abi:cxx11] 00000000002b5860 T YAML::detail::node_data::empty_scalar[abi:cxx11]() 但这怎么可能呢?该符号既未定义,也在库中?什么?或者这些实际上是不同的符号?修改后的名称确实略有不同: nm -D /home/farmer/anaconda3/envs/general/lib/python3.6/site-packages/pyscannerbit/libScannerBitCAP
1280 2022-08-11
编程技术问答社区