繁体   English   中英

错误:聚合对象应使用“{...}”进行初始化

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM