标签: nm

Mac OS X中您最喜欢的反汇编工具是什么?

我现在用的otool,nmFraise文本编辑器拆解Mach-o二进制文件.此时我的工作流程非常简单:

    1.列出现有符号.
nm -g
Run Code Online (Sandbox Code Playgroud)
    2.获取诅咒代码.
otool -vt
Run Code Online (Sandbox Code Playgroud)
    3.将此输出复制并粘贴到文本文件中.
    4.在文本编辑器中阅读和注释代码:)

我正在寻找简化使用disasm代码的工具Mac OS X.

macos assembly otool disassembly nm

54
推荐指数
2
解决办法
4万
查看次数

nm vs"readelf -s"

假设我们有一个名为libtest.so的共享库,其中有一个函数"foo"

使用条带丢弃libtest.so中的所有符号

$strip libtest.so
Run Code Online (Sandbox Code Playgroud)

所以,现在如果我们使用:

$nm libtest.so
Run Code Online (Sandbox Code Playgroud)

它会打印出来:

nm:libtest.so:没有符号

但如果我们使用:

$readelf -s libtest.so 
Run Code Online (Sandbox Code Playgroud)

foo函数仍然可以从其结果中看出:

...

10:000005dc 5 FUNC GLOBAL DEFAULT 12 _Z3foov

...

我们也可以使用命令字符串来检查它:

$strings libtest.so
Run Code Online (Sandbox Code Playgroud)

...

_Z3foov

...

这是我的问题,为什么nm没有给条纹libtest.so带来任何结果?

谢谢

linux readelf nm

35
推荐指数
1
解决办法
1万
查看次数

微软相当于nm命令

我长期以来一直使用cygwin的nm命令来满足我所有的.lib符号调试需求,但最近我想在SO答案中引用它并意识到大多数Windows开发人员都没有安装cygwin.

那么微软相当于什么是nm,即什么命令会列出.lib文件导出的符号,.lib中的未定义符号,等等?

好奇的是,这里有一个示例nm手册页.

symbols nm

32
推荐指数
2
解决办法
2万
查看次数

macOS 上的“ldd -r”等效项

我正在尝试让我的软件在 macOS 上可用,在我的工具链中,我使用该ldd -r MyModel.so命令来验证一切是否顺利,但我确实无法在 macOS 上找到具有相同行为的等效命令。

\n

otoolnm似乎是两个方向,但是他们的哪个选项提供了 的行为ldd -r?还有其他工具可以用于此目的吗?

\n

macos otool ldd nm

21
推荐指数
1
解决办法
1万
查看次数

'_GLOBAL__sub_I_'在nm输出中的含义是什么?

当我试图解决静态链接中的问题时,我_GLOBAL__sub_I_在符号名称前面遇到了几个前缀.尽管我使用过,它仍然以那种形式出现nm --demangle(-C).

我偶然发现了这个答案(如何找到全局静态初始化).看看我的源代码,它确实看起来像一个全局静态变量的初始化.

我想知道的是,我在哪里可以获得有关__sub_和其他受损名称的更多信息__cxxabiv1

c++ name-mangling nm

13
推荐指数
1
解决办法
3293
查看次数

nm和objdump之间的差异

查看手册,objdumpnm具有重叠功能.

你什么时候使用每一个?每个命令的最初目的是什么?

objdump binutils nm

12
推荐指数
1
解决办法
6790
查看次数

图书馆依赖的工具

我正在寻找tool/ commandon Unix平台来检测和文件的library依赖关系..so.o

我已经使用过ldd/ nm/ truss,但我不知道检测库依赖关系的正确方法.

unix solaris shared-libraries ldd nm

12
推荐指数
1
解决办法
9357
查看次数

绑定失败与objcopy --redefine-syms

前提条件

第三方提供了fooapp使用共享对象的C++可执行文件libfoo.so.该库还带有一个标题,foo.hpp以便开发人员可以构建其他应用程序:

/* foo.hpp */
namespace foo {
  void bar(int a, int b);
  // More code below here <--- NOTE!!!
}
Run Code Online (Sandbox Code Playgroud)

成功的例子

这是一个LD_PRELOAD基于标准的功能插入工作流程.

首先,我编写自己的库版本myfoo.cpp,完全反映了以下部分 foo.hpp:

/* myfoo.hpp */
# include <ofstream>
namespace foo {
  void bar(int a, int b) {
    std::cout << a << "," << b << std::endl;
  }
  // NOTHING below here <-- NOTE!!!
}
Run Code Online (Sandbox Code Playgroud)

然后我编译我的库libmyfoo.so,看看以下内容:

$ nm libfoo.so -C | fgrep bar
0000000000021fc0 …
Run Code Online (Sandbox Code Playgroud)

c++ ld objcopy nm ld-preload

11
推荐指数
1
解决办法
459
查看次数

外部符号是如何解决的?

我有两个文件37064544_p1.cpp,37064544_p2.cpp内容相同,如下所示:

int add(int x,int y)
{
return x+y;
}
Run Code Online (Sandbox Code Playgroud)

我用它们编译了它们

g++ -c 37064544_p2.cpp -o 37064544_p2.o
g++ -c 37064544_p2.cpp -o 37064544_p2.o
Run Code Online (Sandbox Code Playgroud)

并使用将它们添加到存档中

ar -rsc lib37064544pf.a 37064544_p1.o 37064544_p2.o
Run Code Online (Sandbox Code Playgroud)

$ nm -s lib37064544pf.a 
Run Code Online (Sandbox Code Playgroud)

给我 :

Archive index:
_Z3addii in 37064544_p1.o
_Z3addii in 37064544_p2.o

37064544_p1.o:
0000000000000000 T _Z3addii

37064544_p2.o:
0000000000000000 T _Z3addii
Run Code Online (Sandbox Code Playgroud)

$ ar -t lib37064544pf.a 
Run Code Online (Sandbox Code Playgroud)

给我

37064544_p1.o
37064544_p2.o
Run Code Online (Sandbox Code Playgroud)

我有一个驱动程序,它调用_Z3addii编译的函数

g++ -static 37064544driver.cpp -o 37064544driver.elf -L. -l37064544pf
Run Code Online (Sandbox Code Playgroud)

结果是

Sum : 11
Run Code Online (Sandbox Code Playgroud)

问题

  1. 符号是如何_Z3addii解决的?

    • 是根据档案索引吗? …

c++ g++ unix-ar static-linking nm

10
推荐指数
1
解决办法
332
查看次数

Windows上是否有替代nm?

我想在Windows上检查类似于Linux工具nm的目标文件.这可能吗?

windows nm

9
推荐指数
1
解决办法
6371
查看次数