c - mingw 是否允许在没有 page_execute 的情况下执行字节数组?

标签 c winapi memory mingw-w64

我查看了metasploit meterpreter源代码,发现它通过将其转换为函数指针来执行shell代码,而不将页面保护设置为page_execute,我还看到github上的一些源代码这样做,例如nullcrypter和 但是在 Visual Studio 中,如果我尝试这样做,它会导致访问冲突,如微软文档中所述,所以这对于 mingw 来说是特别的还是背后有一些技巧

最佳答案

without setting page protect as page_execute

这是不正确的;从您的代码:

unsigned char* exec = (unsigned char*)VirtualAlloc(NULL, PAYLOAD_LENGTH/2 ,0x1000,0x40);
//...
((void (*)())exec)();

注意 VirtualAlloc 的最后一个参数是 0x40,即 PAGE_EXECUTE_READWRITE ,因此无论编译器如何,您都会获得从一开始就可以执行的内存。 MinGW 在这方面没有做任何特别的事情,可执行位已经可以了。

如果此代码在 VC++ 中失败,可能是由于其他一些不兼容性 - 也许您在有效负载代码为 32 位时以 64 位模式进行编译?

关于c - mingw 是否允许在没有 page_execute 的情况下执行字节数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49253684/

相关文章:

c - 如何在 C 中进行 char* 数组元素交换?

c - 等距瓷砖拾取/选择算法

c# - 通过代码更改音频窗口设置(从设置应用程序)

c++ - 通过 C++ 运行命令时隐藏控制台窗口

linux - Java销售过程中令人困惑的内存报告

algorithm - 广度优先搜索实现

c - 仅输入数字 C 编程

c - 在 C 中释放动态分配的结构实例

c - 如何使用临界区

c - 大小为 8 的 Valgrind 无效写入