You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
I'm investigating why instruction tracing in Box64 stops after my_execv() when running Wine on an x86_64 Linux system.
I modified Box64 to collect instruction traces, and I confirmed that the trace always ends immediately after my_execv(). I also verified that this is not caused by fork().
My current understanding is:
Box64 emulates only the initial Wine launcher.
The launcher eventually calls my_execv().
After execve(), the Box64 process image is replaced, so the tracing code inside Box64 disappears.
From that point on, Wine continues to execute natively on an x86_64 host, so Box64 is no longer involved.
However, I observed something that I don't fully understand.
Even when running a 64-bit Windows executable (hello.exe, PE32+), the first executable after my_execv() is:
.../i386-unix/wine-preloader
After that, Wine eventually executes the normal 64-bit components.
My questions are:
Why does Wine execute i386-unix/wine-preloader even when the target program is a 64-bit executable?
Is this expected bootstrap behavior in modern Wine?
When i386-unix/wine-preloader is executed on an x86_64 host, is it still running completely natively (without any further Box64 involvement)?
Is it therefore expected that, after my_execv(), Box64 will never regain control on x86_64, even though i386-unix/wine-preloader appears in the execution chain?
I want to make sure my understanding of Box64's control flow is correct.
reacted with thumbs up emoji reacted with thumbs down emoji reacted with laugh emoji reacted with hooray emoji reacted with confused emoji reacted with heart emoji reacted with rocket emoji reacted with eyes emoji
Uh oh!
There was an error while loading. Please reload this page.
Hi,
I'm investigating why instruction tracing in Box64 stops after my_execv() when running Wine on an x86_64 Linux system.
I modified Box64 to collect instruction traces, and I confirmed that the trace always ends immediately after my_execv(). I also verified that this is not caused by fork().
My current understanding is:
Box64 emulates only the initial Wine launcher.
The launcher eventually calls my_execv().
After execve(), the Box64 process image is replaced, so the tracing code inside Box64 disappears.
From that point on, Wine continues to execute natively on an x86_64 host, so Box64 is no longer involved.
However, I observed something that I don't fully understand.
Even when running a 64-bit Windows executable (hello.exe, PE32+), the first executable after my_execv() is:
.../i386-unix/wine-preloader
After that, Wine eventually executes the normal 64-bit components.
My questions are:
Why does Wine execute i386-unix/wine-preloader even when the target program is a 64-bit executable?
Is this expected bootstrap behavior in modern Wine?
When i386-unix/wine-preloader is executed on an x86_64 host, is it still running completely natively (without any further Box64 involvement)?
Is it therefore expected that, after my_execv(), Box64 will never regain control on x86_64, even though i386-unix/wine-preloader appears in the execution chain?
I want to make sure my understanding of Box64's control flow is correct.
Thanks!
All reactions