抛出异常:读取访问冲突。 **thunkData** 是 0x13E6CC3

问题描述 投票:0回答:0

我面临着读/写访问冲突的问题。有人可以帮我吗?我已经阅读了很多论坛以找到解决方案,但没有成功。

这是我的代码中的函数。

void configureLoaderIMP(IMAGE_SECTION_HEADER* loaderSecHeader, BYTE* loaderBaseAddress) {
    DWORD offsetIMP = 0;
    getLoaderIMP(NULL, &offsetIMP);
    DWORD rvaBaseAddress = loaderSecHeader->VirtualAddress + offsetIMP;
    IMAGE_IMPORT_DESCRIPTOR* imageImpDescriptor = (IMAGE_IMPORT_DESCRIPTOR*)(loaderBaseAddress + offsetIMP);
    while (imageImpDescriptor->Name != 0) {
        if (imageImpDescriptor->OriginalFirstThunk != 0) {
            imageImpDescriptor->OriginalFirstThunk += rvaBaseAddress;
        }
        imageImpDescriptor->Name += rvaBaseAddress;
        IMAGE_THUNK_DATA* thunkData = (IMAGE_THUNK_DATA*)(loaderBaseAddress + offsetIMP + imageImpDescriptor->FirstThunk);
        imageImpDescriptor->FirstThunk += rvaBaseAddress;
        while (thunkData->u1.AddressOfData != 0) {
            thunkData->u1.AddressOfData += rvaBaseAddress;
            ++thunkData;
        }
        ++imageImpDescriptor;
    }
}

问题出现在“while”块

while (thunkData->u1.AddressOfData != 0)..

我试图使“thunkData”变量成为全局变量,通过 VirtualAlloc 为其分配内存,但没有任何效果。

提前谢谢你。

c++ pointers portable-executable
© www.soinside.com 2019 - 2024. All rights reserved.