Investigating hang - giving some info about the bug [BUG]
Hello,
My game keeps freezing so I took some time to try and investigate what's happening so here it is: The event log looks like this: " After doing some reverse I saw that the event says that the hang is here: " on the nop instruction that as you might know it does nothing and it's probably just compiler magic to align some code blocks ( not getting into it). The thing is, the event says that it's a crash (Kernel-Power type) right after a call to RtlRaiseException from ntdll.dll ( the above code is from kernelbase.dll -> more exact from RaiseException that is more or less a wrapper to RtlRaiseException). Since the exception code is 0xe0000001 it's obviously not a standard windows exception code and I start looking into PoE2 assembly code and just one bit of code has this exception code in the main executable: " Judging by the assembly code, seems that this is just a custom exception handler of some sort ( I might be wrong ) I saw that the above function is passed to another function labeled signal by the decompiler as seen below: " The signal function looks roughly like this ( just to help you identify the function easier ): " I also wanna mention that the hang usually happens when I am loading another instance ( for example going to the next region - for example going from Clearfell to The Grelwood - it''s just an example ). I also saw some addresses in another hang some days ago that looked like kernel addresses so ( and it's just my "reverse engineering" intuition ) that mmight be a bug related to multithreading and the video driver but I might be awfully wrong with this. I will try to investigate more when I have more time. Until then I hope this is useful to you :) Last bumped on Jan 27, 2025, 9:50:14 PM
|
![]() |
I was able to generate a crashdump and this is much how the stacktrace looks like right before the exception occurs:
" this is pretty much the code that generates the thread that produces the hang: " Judging by "it seems that is something about TLS data. Since on x64 [gs:58h] holds the Linear address of the thread-local storage array. Judging by this code: " the code that generates the hang it's happening only if [rdi+0x20] or [rdi+0x28] is not 0. Since rdi comes from rcx, it means that rdi is the first parameter passed to this function. the C code for this function looks something like this: " I found only one call to this function in the main executable and the assembly code looks like this (sub_140C5BA30) : " and the function making this call is a function that has a variable numbers of arguments. This is just a snippet in C just to help you identify the code: " Seems to be a problem with the first parameter. Also seems that in the main executable there is only one call to sub_140C5BA30 " and this looks like a catch block. Also judging by the strings looks like a function that creates some kind of jobs " and if i go in frame further on the calling stack i saw some more strings like : " and after that there is a call to the functions i've posted above: " I hope it helps you investigate the issue. I will try to analyze further when i have some time |
![]() |
bump
// Last edited by IceCool10#6669 on Jan 28, 2025, 7:13:51 PM
|
![]() |
" Yea there is a problem with the multi-threading code based on my testing on another issue that have been happening in both games, there is a chance that both issues might be closely related, ever since they updated their engine particle code, there is a high chance some of the old code might be incompatible with the new instruction, and since this engine is very old is most likely the case in some parts of it, which can be a nightmare if it doesn't work and would require rewriting from scratch. that's the other issue post https://www.pathofexile.com/forum/view-thread/3706277 |
![]() |