VS-2010中的函数指针(虚拟Alloc调用)

VS-2010中的函数指针(虚拟Alloc调用),c,visual-studio-2010,assembly,function-pointers,virtualalloc,C,Visual Studio 2010,Assembly,Function Pointers,Virtualalloc,作为一个实验,我试图编写以下程序,它允许我在运行时生成代码。i、 e.我做以下工作: 1。用我要执行的指令的操作码填充缓冲区。 2。声明一个函数指针并使其指向缓冲区的开始。 3.使用上述func ptr调用函数 代码如下: (根据以下AndreyT的说明进行了更新。) 我想我现在需要将mmap()调用与virtualAlloc()交换。 谢谢大家。下一步,我需要深入到MSDN中: ValualLoCube()/代码>我猜。 < p>您正在获得这个错误,因为您试图在块的中间声明 PTR < /代码

作为一个实验,我试图编写以下程序,它允许我在运行时生成代码。i、 e.我做以下工作:

1。用我要执行的指令的操作码填充缓冲区。
2。声明一个函数指针并使其指向缓冲区的开始。
3.使用上述func ptr调用函数

代码如下: (根据以下AndreyT的说明进行了更新。)

我想我现在需要将
mmap()
调用与
virtualAlloc()
交换。

谢谢大家。下一步,我需要深入到MSDN中:<代码> ValualLoCube()/代码>我猜。

< p>您正在获得这个错误,因为您试图在块的中间声明<代码> PTR < /代码>。

经典的ANSI C语言(C89/90)不允许在块的中间声明。声明必须位于块的开头。在C99中只允许声明中间变量,


GCC编译器,即使在C89/90模式下,也允许将中间变量声明为非标准扩展。MSVC编译器是一个严格的C89/90编译器,它不允许这样的声明

2600赫兹:您遇到了什么错误?谢谢:)现在深入MSDN了解virtualAlloc调用语法和参数。谢谢!!
#include <stdio.h>
#include <stdint.h>
#include <stdlib.h>
#include <string.h>
//#include <sys/mman.h>
int main(int argc, char *argv[])
{
    int u32;
    int (*ptr)(void);

    uint8_t *buf = malloc(1000);
    //uint8_t *buf = mmap(NULL, 1000, PROT_EXEC | PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);

    buf[0] = 0xb8;
    u32= 42;
    memcpy(buf + 1, &u32, 4);
    buf[5] = 0xc3;

    ptr = (int (*)(void)) buf;

    printf("return is %d\n", ptr());

    return 0;
}
1>MSVCRTD.lib(crtexew.obj) :  
error LNK2019: unresolved external symbol _WinMain@16 referenced in function ___tmainCRTStartup  
1>file.exe : fatal error LNK1120: 1 unresolved externals  
Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped