gpt4 book ai didi

c - 函数指针和 GCC 警告

转载 作者:行者123 更新时间:2023-12-02 18:35:32 24 4
gpt4 key购买 nike

我目前正在学习如何编写 shellcode 并获得 GCC 警告“分配不兼容的指针类型”。为什么?

您好,LM


char shellcode[] =
"\x31\xc0"
"\xb0\x01"
"\x31\xdb"
"\xcd\x80";


int main() {
void (*func)() = shellcode;

func();

return 0;
}

最佳答案

我会写下我的建议作为答案和妓女以获得一些声誉:-)

您需要将数据指针显式转换为函数指针。使用适当的函数指针的 typedef,您可以这样做而不会使代码太难以阅读:

char shellcode[] = 
"\x31\xc0"
"\xb0\x01"
"\x31\xdb"
"\xcd\x80";

typedef void (*SHELLCODE)(void);

int main() {
SHELLCODE func = (SHELLCODE) shellcode;
func();

/* ...and this will work as well, which some might find more readable: */
((SHELLCODE) shellcode)();

return 0;
}

这可以使用 clang 1.1 进行干净的编译,但 GCC 4.4.3 仍然会向您发出有关指针转换的警告 - 尽管现在这是一个更精确的警告:

$ gcc -Wall -Wextra -ansi -pedantic shellcode.c 
shellcode.c: In function ‘main’:
shellcode.c:10: warning: ISO C forbids conversion of object pointer to function pointer type
shellcode.c:14: warning: ISO C forbids conversion of object pointer to function pointer type

跳过“-pedantic”标志也可以使其与 GCC 一起干净地编译,但谁会认真这样做呢?

关于c - 函数指针和 GCC 警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3467103/

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