如何获取JVM原生级别函数的符号名?
How to get the symbol name of JVM native level function?
我想用gdb设置一个断点,但我不知道该方法对应的符号。有办法吗?
我认为评论指出的 JNI 规范是执行此操作的原则方法。
但是,从 gdb 中以交互方式找到函数也不难。您只需要知道您的方法的名称(我们称之为 "hello")并且 JNI 名称始终以 "Java_" 开头。然后你可以向gdb询问所有匹配的函数:
(gdb) info function ^Java_.*hello
这将找到该名称的所有函数。
只要您的方法具有普通名称或驼峰命名法,此方法就有效。它不适用于嵌入的“_”或非 ASCII 字符。为此,您将不得不稍微阅读一下规范。
现在,如果 gdb 无法看到该函数,这将不起作用——例如,如果 JNI .so
尚未加载。您可以通过 运行 加载点或在相关库上使用 nm
等来完成此操作。
我想用gdb设置一个断点,但我不知道该方法对应的符号。有办法吗?
我认为评论指出的 JNI 规范是执行此操作的原则方法。
但是,从 gdb 中以交互方式找到函数也不难。您只需要知道您的方法的名称(我们称之为 "hello")并且 JNI 名称始终以 "Java_" 开头。然后你可以向gdb询问所有匹配的函数:
(gdb) info function ^Java_.*hello
这将找到该名称的所有函数。
只要您的方法具有普通名称或驼峰命名法,此方法就有效。它不适用于嵌入的“_”或非 ASCII 字符。为此,您将不得不稍微阅读一下规范。
现在,如果 gdb 无法看到该函数,这将不起作用——例如,如果 JNI .so
尚未加载。您可以通过 运行 加载点或在相关库上使用 nm
等来完成此操作。