小编gui*_*015的帖子

澄清C中的函数指针

下面的代码来自例子abo3.c来自不安全的编程 -也见为什么投extern puts给一个函数指针(void(*)(char*))&puts:

int main(int argv,char **argc) {
    extern system,puts; 
    void (*fn)(char*)=(void(*)(char*))&system; // <==
    char buf[256];
    fn=(void(*)(char*))&puts;
    strcpy(buf,argc[1]);
    fn(argc[2]);
    exit(1);
}
Run Code Online (Sandbox Code Playgroud)

特别是这一行:

void (*fn)(char*)=(void(*)(char*))&system;
Run Code Online (Sandbox Code Playgroud)

我觉得这void (*fn)(char*)听起来像一个lambda,但我知道它不是.那么,也许这只是一个带括号的游戏,其中void *fn(char*)是一个函数的声明,这个函数正在引用system?但为什么(char*参数没有名字?这是允许的吗?

c

12
推荐指数
2
解决办法
992
查看次数

what(*(void(*)())shellcode)(); 手段?

对不起,如果这听起来微不足道,但任何人都可以向我解释这是什么?

(*(void(*)()) shellcode)();
Run Code Online (Sandbox Code Playgroud)

我认为第二个*是设置void为指针,但第一个*?一个铸件?并且()是调用一些功能?

源代码在这里:

/*
# Title: Linux/x86 chmod('/etc/passwd',0777) - shellcode 42 bytes
# Platform: linux/x86_64
# Author: Mohammad Reza Espargham
#    Linkedin    :   https://ir.linkedin.com/in/rezasp
#    E-Mail      :   me[at]reza[dot]es , reza.espargham[at]gmail[dot]com
#    Website     :   www.reza.es
#    Twitter     :   https://twitter.com/rezesp
#    FaceBook    :   https://www.facebook.com/mohammadreza.espargham


 Disassembly of section .text:


 00000000 <.text>:
 0:    6a 0f                    push   $0xf
 2:    58                       pop    %eax
 3:    68 90 90 ff 01           push   $0x1ff9090
 8:    59                       pop    %ecx
 9: …
Run Code Online (Sandbox Code Playgroud)

c c++

7
推荐指数
1
解决办法
1373
查看次数

标签 统计

c ×2

c++ ×1