Skip to content

加载最新版sciter.dll崩溃STATUS_ACCESS_VIOLATION错 #47

@idigger

Description

@idigger

最新版 sciter.dll(v5.0.3.13) 用 mmpp 加载崩溃 STATUS_ACCESS_VIOLATION 错,v5.0.3.13版之前的均可正常加载。

不知这一版开始有了什么变化。

dll下载连接 https://gitlab.com/sciter-engine/sciter-js-sdk/-/blob/main/bin/windows/x32/sciter.dll?ref_type=heads

用最新提交的 mmpp 加载也不行。
__LdrLoadDllMemoryExW 崩溃 STATUS_ACCESS_VIOLATION

int main() {
    size_t len = 0;
    PVOID buffer = ReadDllFile2("MemoryModule.dll", &len);
    printf("1: %p, %u\n", buffer, len);
    HMODULE hm = (HMODULE)LoadLibraryWithReflectiveLoader( buffer, len );
    printf("2: hm: %p\n", hm);

    //MmpGlobalDataPtr = *(PMMP_GLOBAL_DATA*)GetProcAddress(hm, "MmpGlobalDataPtr");
    //printf("3: %p\n", MmpGlobalDataPtr);
    __LdrLoadDllMemoryExW = (LdrLoadDllMemoryExW_t)GetProcAddress(hm, "LdrLoadDllMemoryExW");
    __LdrUnloadDllMemory = (LdrUnloadDllMemory_t)GetProcAddress(hm, "LdrUnloadDllMemory");
    printf("4: %p, %p\n", __LdrLoadDllMemoryExW, __LdrUnloadDllMemory);

    VirtualFree(buffer, len, MEM_RELEASE);
    buffer = ReadDllFile2("sciter50313.dll", &len);
    printf("5: %p, %u\n", buffer, len);

    HMODULE hm1 = NULL;
    NTSTATUS res = __LdrLoadDllMemoryExW(&hm1, NULL, LOAD_FLAGS_NOT_FAIL_IF_HANDLE_TLS, buffer, 0, NULL, NULL);

    printf("6: res: %x, hm1: %p\n", res, hm1);
    
    //DisplayStatus();

    return 0;
}

上面 ReadDllFile2 中内存是用 VirtualAlloc(0, size, MEM_COMMIT, PAGE_EXECUTE_READWRITE) 分配的。

错误日志

故障存储段 2115915853192506159,类型 1
事件名称: APPCRASH
响应: 不可用
Cab ID: 0

问题签名:
P1: loader_mmpp_from_mem.exe
P2: 0.0.0.0
P3: 00000000
P4: 3752B4E99BA4A6F1.DLL
P5: 0.0.0.0
P6: 66843965
P7: c0000005
P8: 000059e4
P9: 
P10: 

上面测试程序可以正常加载 5.0.3.13版之前的 sciter.dll

麻烦大侠看看能否解决一下,多谢了。

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions