gpt4 book ai didi

在 C 程序的宏预处理器中调用内联函数

转载 作者:太空宇宙 更新时间:2023-11-04 06:24:17 24 4
gpt4 key购买 nike

我对以下宏预处理器定义感到困惑:

#define HOOK_SYSCALL(NAME) original_##NAME = get_sys_call_table_addr()[__NR_##NAME]; 

get_sys_call_table_addr()函数的代码如下:

ssize_t *sys_call_table = (ssize_t *)NULL;

void** get_sys_call_table_addr(void)
{
void *swi_addr=(long *)0xffff0008;
unsigned long offset=0;
unsigned long *vector_swi_addr=0;

offset=((*(long *)swi_addr)&0xfff)+8;
vector_swi_addr=*(unsigned long *)(swi_addr+offset);

while(vector_swi_addr++)
{
if(((*(unsigned long *)vector_swi_addr)& 0xfffff000)==0xe28f8000)
{
offset=((*(unsigned long *)vector_swi_addr)& 0xfff)+8;
sys_call_table=(void *)vector_swi_addr+offset;
break;
}
}
return (void **) sys_call_table;
}

我想问一下这个具体行是否:

get_sys_call_table_addr()[__NR_##NAME];

正在调用内联函数作为数组?就像我们对普通数组所做的那样,例如数组[3];

谢谢!!

最佳答案

## 用于连接预处理器标记。假设 NAMEexit。然后 get_sys_call_table_addr()[__NR_##NAME] 将是get_sys_call_table_addr()[__NR_exit]。这意味着 get_sys_call_table_addr() 被调用,计算结果将是一个指针。

记住 arr[x]*(arr + x)。假设 __NR_exit 是一个值为 1 的常量。然后,函数返回的结果指针移动 1,然后取消引用。现在将其分配给变量 original_exit

关于在 C 程序的宏预处理器中调用内联函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29228723/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com