-
Notifications
You must be signed in to change notification settings - Fork 95
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
两层内存加载情况下,Win7程序不能运行 (MemoryModule -> MemoryModulePP binary -> APP binary) #19
Comments
你好,感谢反馈。通过测试发现,如果进程中没有处理过TLS信息,TLS_VECTOR使用的是ThreadId字段,而不是Length字段。此时无论在Win7还是Win10都会存在这个问题。我已经提交了对这种情况的处理。需要注意的是,MemoryModulePP编译成dll后包含TLS信息,而MemoryModule没有处理;MemoryModulePP使用结构化异常处理,而MemoryModule不支持异常处理。因此不推荐两个库混用。 |
强制将Length视为0,MemoryModulePP工作没问题,但是程序还是不能正常工作。没有其他办法去获取真实的Length吗? 还请教下“MemoryModulePP使用结构化异常处理,而MemoryModule不支持异常处理”这个会影响什么?能举个例子吗,非常感谢! |
关于应用程序不能正常工作的问题,建议先不经过MM而直接加载MMPP,看看能不能正常工作。 |
感谢,我试了MMPP直接是能加载的,把Length都视为0的时候,MM->MMPP->APP下会崩溃 |
你可以在exe中声明一个thread_local变量,并在某个函数里引用一下它。这时候TLS_VECTOR的length就不是0了,看看能不能正常运行。目前已知的条件无法定位到问题的位置,如果方便的话可以贴一个能复现问题的代码。 |
两层内存加载情况下,Win7下多线程程序不能运行,创建线程就会崩溃,单线程程序正常;多线程程序在Win10下正常
加载顺序:MemoryModule(https://github.com/fancycode/MemoryModule) -> MemoryModulePP binary -> APP binary
跟踪代码发现MmpTLS.cpp->MmpUserThreadStart中的auto size = CONTAINING_RECORED(record->TlspLdrBlock, TLS_VERCTOR, ModuleTlsData)->Length;获取到的size不正常,值为大数,但Win10中其是正常的
MemoryModulePP的API使用的LoadLibraryMemory
同时我注释掉了以下代码,以下代码会直接崩溃
auto tls = CONTAINING_RECORD(NtCurrentTeb()->ThreadLocalStoragePointer, TLS_VECTOR, TLS_VECTOR::ModuleTlsData);
if (tls && tls->Length > MMP_START_TLS_INDEX) {
RtlRaiseStatus(STATUS_NOT_SUPPORTED);
return FALSE;
}
The text was updated successfully, but these errors were encountered: