- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
为什么/proc/kallsyms 中的某些符号会重复?例如:我看到 _acpi_module_name
、__this_module
、cleanup_module
、.LC0
重复多次。
为什么会这样?为什么有这样的符号,一个名称解析为多个地址?我看到 __acpi_module_name 在/proc/kallsyms 中重复了 113 次。
最佳答案
这些是不同的情况。
对于_acpi_module_name
,它们只是静态全局变量。静态全局变量或函数仅在声明它的文件中“可见”。它在 include/acpi/acoutput.h
中定义。
#define ACPI_MODULE_NAME(name) static const char ACPI_UNUSED_VAR _acpi_module_name[] = name;
对于__this_module
,它们定义在每个内核模块中,由script/mod/modpost
添加。
/**
* Header for the generated file
**/
static void add_header(struct buffer *b, struct module *mod)
{
buf_printf(b, "#include <linux/module.h>\n");
buf_printf(b, "#include <linux/vermagic.h>\n");
buf_printf(b, "#include <linux/compiler.h>\n");
buf_printf(b, "\n");
buf_printf(b, "MODULE_INFO(vermagic, VERMAGIC_STRING);\n");
buf_printf(b, "MODULE_INFO(name, KBUILD_MODNAME);\n");
buf_printf(b, "\n");
buf_printf(b, "__visible struct module __this_module\n");
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
buf_printf(b, "__attribute__((section(\".gnu.linkonce.this_module\"))) = {\n");
buf_printf(b, "\t.name = KBUILD_MODNAME,\n");
if (mod->has_init)
buf_printf(b, "\t.init = init_module,\n");
if (mod->has_cleanup)
buf_printf(b, "#ifdef CONFIG_MODULE_UNLOAD\n"
"\t.exit = cleanup_module,\n"
"#endif\n");
buf_printf(b, "\t.arch = MODULE_ARCH_INIT,\n");
buf_printf(b, "};\n");
}
对于cleanup_module
,定义在include/linux/module.h
#define module_exit(exitfn) \
static inline exitcall_t __maybe_unused __exittest(void) \
{ return exitfn; } \
void cleanup_module(void) __attribute__((alias(#exitfn)));
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#endif
对于.LC0
,它是编译器在不同源文件中生成的标签,如静态全局变量。
关于linux - 在/proc/kallsyms 中重复名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46889468/
start_kernel 函数中创建的kallsyms 在哪里?我的意思是我们在 start_kernel 函数中有很多函数调用。是否在那里创建了 kallsyms。如果不是,请指出它是在哪个函数调用
在 Linux 内核中,我想探测内核函数 effective_prio()。它定义为 static。当我在 kallsyms 中搜索它的符号时,我找不到它。 kallsyms 有内核函数的所有符号吗?
我正在编写有关低级内容的代码。我需要知道内核符号地址才能编写可靠的代码。所以我在 Ubuntu kernel-3.0.19 的用户模式下尝试读取 kallsyms。这是用户模式下的 kallsyms
我不想找到系统调用表的内核地址。我通常通过 grepping sys_call 来做到这一点但在一个系统中,我可以看到地址但在其他情况下,它不显示该条目。 root@ubuntu:~# cat /pr
为什么/proc/kallsyms 中的某些符号会重复?例如:我看到 _acpi_module_name、__this_module、cleanup_module、.LC0 重复多次。 为什么会这样?
我有一个关于 linux 内核的项目。我们不能编译 linux 内核,我们必须调用未导出的函数,但是这个函数可以在/proc/kallsyms 中找到。(我们可以得到函数的地址)。但是我们并不知道调用
我使用以下开关编译我的 C++ 代码: g++ -O0 -g -rdynamic -DNDEBUG -DARMA_NO_DEBUG -std=c++11 -pthread 链接器开关是: -lboos
符号 machine_power_off 在 /proc/kallsyms 中用“T”标记: $ grep -w machine_power_off /proc/kallsyms ffffffff81
具有繁重内核工作(锁定解锁)的多线程程序,尝试使用分析工具在我的代码中找到热点。 我写了一个最小的可重现程序。编译它。使用分析工具,如 perf 、 gprof 和调用堆栈记录。然后都不能在我的代码报
我从 this SO post 看到那/proc/kallsyms应该有动态加载模块的符号以及静态代码,而 System.map仅包含静态代码的符号。但是,当我 cat /proc/kallsyms我
/boot/System.map 和/proc/kallsyms 之间有一个固定的间隙。每次重启时差距都会改变。 有布局随机化之类的东西吗? 例如, > cat /boot/System.map ff
我只想知道 System.map 之间的区别文件和 /proc/kallsyms . 我正在使用 Linux 3.16 通用内核。我知道两者都是内核符号表。当我对这些文件进行比较时,两者都具有相同的内
我是一名优秀的程序员,十分优秀!