[英]c++, “Error: initialization with '{…}' expected for aggregate object”
[英]Error: Initialization with '{...}' expected for aggregate object
下面是我的代码,它处理 payload[] 数组并将其结果存储在 myFinalShellcode[] 数组中。
#include <windows.h>
#include <stdio.h>
unsigned char payload[] = { 0xf0,0xe8,0xc8,0x00,0x00,0x00,0x41,0x51,0x41,0x50,0x52,0x51,0x56,0x48,0x31 };
constexpr int length = 891;
constexpr int number_of_chunks = 5;
constexpr int chunk_size = length / number_of_chunks;
constexpr int remaining_bytes = length % number_of_chunks;
constexpr int size_after = length * 2;
unsigned char* restore_original(unsigned char* high_ent_payload)
{
constexpr int payload_size = (size_after + 1) / 2;
unsigned char low_entropy_payload_holder[size_after] = { 0 };
memcpy_s(low_entropy_payload_holder, sizeof low_entropy_payload_holder, high_ent_payload, size_after);
unsigned char restored_payload[payload_size] = { 0 };
int offset_payload_after = 0;
int offset_payload = 0;
for (size_t i = 0; i < number_of_chunks; i++)
{
for (size_t j = 0; j < chunk_size; j++)
{
restored_payload[offset_payload] = low_entropy_payload_holder[offset_payload_after];
offset_payload_after++;
offset_payload++;
}
for (size_t k = 0; k < chunk_size; k++)
{
offset_payload_after++;
}
}
if (remaining_bytes)
{
for (size_t i = 0; i < sizeof remaining_bytes; i++)
{
restored_payload[offset_payload++] = high_ent_payload[offset_payload_after++];
}
}
return restored_payload;
}
int main() {
unsigned char shellcode[] = restore_original(payload);
}
我在最后一个代码行(在主函数内部)收到以下错误:
Error: Initialization with '{...}' expected for aggregate object
我试图更改阵列本身的任何内容(似乎它们可能是问题所在)。 我非常感谢您的帮助,因为这是我个人研究的一部分 :)
为了初始化用[]
定义的数组,您必须提供一个用{}
括起来的值列表,正如错误消息所述。
例如:
unsigned char shellcode[] = {1,2,3};
如果你想为它分配restore_original
的输出,你可以将shellcode
更改为指针:
unsigned char* shellcode = restore_original(payload);
更新:
正如您在@heapunderrun 的评论中看到的那样,您的代码中还有另一个问题。 restore_original
返回一个指向局部变量的指针,该指针在函数返回时无效(悬空指针)。 为了解决这个问题, restore_original
应该使用 new 在堆上分配内存。 当你使用shellcode
后,这个分配最终必须被释放。
然而- 虽然你可以让它这样工作,我强烈建议你使用std::vector
分配在堆上的动态数组。 它将节省您手动管理内存分配/释放的需要,以及其他优势。
您不能将char *
分配给char []
。 您可能可以使用 constexpr 做一些事情,但我怀疑这里有 XY 问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.