【发布时间】:2021-12-30 06:11:35
【问题描述】:
从事一些测试项目,我有这段代码,效果很好:
#include <windows.h>
#include <iostream>
using namespace std;
int main(int argc, char** argv) {
char shellcode[] = "..snip..\xa0\x4e\xbc\x0b\x45\xee\xb3\x1b\xf9..snip..";
void* exec = VirtualAlloc(0, sizeof shellcode, MEM_COMMIT, PAGE_EXECUTE_READWRITE);
memcpy(exec, shellcode, sizeof shellcode);
((void(*)())exec)();
return 0;
}
但我试图通过 shellcode 传递动态大小的字节数组,这不会执行代码:
int main(int argc, char** argv) {
std::string(test) = "..snip..\xa0\x4e\xbc\x0b\x45\xee\xb3\x1b\xf9..snip..";
char* shellcode = new char[test.size()];
memcpy(shellcode, test.data(), test.size());
//std::copy(test.begin(), test.end(), shellcode);
//delete[] shellcode;
//std::cout << shellcode;
void* exec = VirtualAlloc(0, sizeof shellcode, MEM_COMMIT, PAGE_EXECUTE_READWRITE);
memcpy(exec, shellcode, sizeof shellcode);
((void(*)())exec)();
//return 0;
}
谁能指出问题出在哪里?或者我该如何改进?
【问题讨论】:
-
可变长度数组 (VLA) 不是标准 C++ 的一部分 - 但一些编译器支持它们作为语言扩展。不要使用 VLA。如果需要动态数组,请使用 std::vector。
标签: c++