- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
ltrace 是如何工作的?
它如何找到该程序调用的库函数?
所有对库函数的调用是否有通用的代码路径?也许 ltrace 正在这个公共(public)代码路径中设置断点?
谢谢!
最佳答案
动态可执行文件有一个符号表,供链接器在解析需要连接到库函数的引用时使用。 (您可以通过运行 objdump -T/path/to/binary
自己查看)。
这个符号表也可以通过其他工具访问——例如 ltrace
——所以确定哪些函数需要 Hook 并单独遍历该列表是微不足道的。
参见 a talk on ltrace internals在 Ottowa Linux 研讨会上发表,它提供了详细的、逐个功能的分割;要跟随来源,请参阅 official repository , 或 third-party github mirror .
一些较新的版本(比那个谈话更新)也 Hook dlopen()
调用,以便能够跟踪动态加载库的调用。片刻的想法应该是相当明显的机制——如果可以用垫片替换 dlopen()
(当 dlopen()
本身如上所述动态链接时),然后可以在它返回的任何函数指针上设置断点。
关于linux - ltrace(库跟踪工具)如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32214079/
strace 密码: getcwd("/root"..., 4096) = 6 ltrace 密码: getcwd(NULL, 0)
当 ltrace 命中一个 rand 函数时,它会显示 4 个参数,如下所示:随机数 (0, 0x5649bd4e6010, 0x7f0955490760, 0x7f09551cf7b0) = 0
我正在运行 ltrace -c -C ./a.out 来对我的应用程序进行一些分析,但它给出的错误如下: 错误:调用嵌套太深! 我的代码很简单 void StrinstrTest(long loop/
我是 ltrace 的新手。 我想使用通配符(模式)来跟踪函数调用,但根据我看到的网页,它们似乎无法正常工作,例如http://man7.org/linux/man-pages/man1/ltrace
根据手册页,ltrace 应该拦截并记录任何已执行进程的动态库调用,但它似乎无法在某些二进制文件上正常工作。 这是在尝试跟踪 strcpy 时重现问题的方法。 我首先看到 ltrace 能够处理一些二
ltrace 是如何工作的? 它如何找到该程序调用的库函数? 所有对库函数的调用是否有通用的代码路径?也许 ltrace 正在这个公共(public)代码路径中设置断点? 谢谢! 最佳答案 动态可执行
正如标题所说,ltrace 在我的系统上不能正常工作。在大多数情况下它不显示任何输出,比如 $ltrace ls [usual ls output] +++ exited (status 0) +++
osx 拥有非常强大的 dtrace/ktrace/dtruss 工具——但是我现在不愿意投入必要的时间来学习如何处理它们。 在 OSX 上获得 linux ltrace(可能还有 strace)等效
标题说的都是 friend ! 如何为我想使用 ltrace/strace 监视其执行的可执行文件提供命令行参数? 例如,如果可执行文件是 'a.out' 并且我想将 ltrace 的输出存储在文件
根据我的理解,ltrace 实用程序用于跟踪库调用。我ltrace了一个只调用printf的简单程序,但是库函数显示的是puts而不是printf。我很好奇为什么它不显示 printf 而显示 put
我是否可以查看行号和文件名(对于我的使用 ltrace/strace 运行的程序)以及库调用/系统调用信息。 例如: code section :: ptr = malloc(sizeof(int)*
我想知道如何使用 ltrace 来获取 mpi 应用程序的库函数调用,但 ltrace 不起作用,我的 mpirun 无法成功。有什么想法吗? 最佳答案 您应该能够简单地使用: $ mpiexec -
在打了一堆补丁之后,我能够运行 Makefile,但现在它在最后一步崩溃了 :(。这是我得到的错误: arm-none-linux-gnueabi-gcc main.o libltrace.a -le
我需要分析 android 应用程序的动态库调用,并决定为此目的使用“ltrace”工具进行分析。我将“ltrace”工具合并到android包中,然后一起编译成功。就像通常的 linux 控制台应用
我已经为此苦苦挣扎了大约一天。 我能够构建一个简单的共享库和测试程序,当我在 ltrace 控制下运行它时,我可以获得预期的方法名称,包括静态、虚拟和纯虚拟方法。 我使用 cmake 构建我的共享库。
ltrace doesn't work on binaries linked with the -z now option ,这是我的 Ubuntu 19.10 系统上的默认设置。它仅适用于与 -z
有没有办法隐藏来自 strace 的系统调用?和来自 ltrace 的动态库调用?例如,使用 system ()。 在本学期我的软件构建的最后一个类中,讲师向我们透露,我们本可以使用 system我们
我尝试过使用 ltrace。我尝试使用以下命令来分析程序 sampleapp, ltrace -c -T --library=library.so --output=out 使用的 library.s
我是一名优秀的程序员,十分优秀!