Linux内核实用程序函数,将符号字符串作为输入并返回其地址

Linux内核实用程序函数,将符号字符串作为输入并返回其地址,linux,kernel,Linux,Kernel,linux中是否有API可以提供作为字符串输入传入的符号的地址? 例如,在下面的函数中,我需要与&begin1打印中所示相同的输出 我之所以需要这个程序,是因为我的程序中有像begin1、begin2、begin3等标签,我必须运行一个循环来获取它们的地址 外部无效*从1开始; int main(int argc,字符**argv) { char buf1[30],buf2[30] int i= 1; asm volatile ("nop;\n" "nop;\n" "

linux中是否有API可以提供作为字符串输入传入的符号的地址? 例如,在下面的函数中,我需要与&begin1打印中所示相同的输出

我之所以需要这个程序,是因为我的程序中有像begin1、begin2、begin3等标签,我必须运行一个循环来获取它们的地址

外部无效*从1开始; int main(int argc,字符**argv) { char buf1[30],buf2[30]

int i= 1;
asm volatile ("nop;\n"
       "nop;\n"
       "begin1:\n"
       "nop;\n"
       "nop;\n"
       "nop;\n"
       "nop;\n"
       "nop;\n"
       "nop;\n"
       "lbl1:\n"
       "nop;\n"
       "nop;\n"
       );


printf("&begin1 = %p\n", &begin1); //NEED THIS OUTPUT

sprintf(buf1, "begin%d",i);
sprintf(buf2,"lbl%d",i);

//Q: Can we pass buf1 as input to a kernel function that can give me the same output as above? 

return 0;

}

带有
main
函数的程序不能是内核代码。它是由您的shell启动的应用程序代码- (和应用程序通过中列出的内核进行交互…)

在Linux上,内核代码通常是某些自定义驱动程序的内核模块

您可以使用and
dlsym
(并且您需要符号是全局的,所以在汇编程序中使用
.global
指令)。然后,您希望使用
-rdynamic
标志(以及
-ldl
库)链接您的程序,使用空路径调用
dlopen
,并在该程序句柄上使用
dlsym

请注意,
dlopen
不是系统调用(它使用
open
mmap
…)


顺便说一句,您可能对GCC扩展感兴趣。

它是应用程序代码,而不是内核代码。因此,在问题中提到内核并将其作为标记是错误的。为什么要问这个问题?你提问的动机是什么?