This PR fixes `INFINITE` waiting (`SleepEx`, `WaitForSingleObject`,
etc). Currently `INFINITE` is not infinite but "at this moment" (waiting
point in time == `clock.steady_now()`).
Bumps [deps/flatbuffers](https://github.com/google/flatbuffers) from
`a577050` to `8914d06`.
<details>
<summary>Commits</summary>
<ul>
<li><a
href="8914d06ab7"><code>8914d06</code></a>
Remove invalid dependency on FLATBUFFERS_GENERATE_HEADERS_SCHEMAS (<a
href="https://redirect.github.com/google/flatbuffers/issues/8834">#8834</a>)</li>
<li><a
href="522f2379a6"><code>522f237</code></a>
Update CODEOWNERS</li>
<li><a
href="7cb0bcb212"><code>7cb0bcb</code></a>
C++ Feature: Mutable union getters (<a
href="https://redirect.github.com/google/flatbuffers/issues/8852">#8852</a>)</li>
<li><a
href="b1e7868db6"><code>b1e7868</code></a>
add verification that type_vec.size == vec.size() (<a
href="https://redirect.github.com/google/flatbuffers/issues/8853">#8853</a>)</li>
<li><a
href="68e3c839c3"><code>68e3c83</code></a>
update provenance (<a
href="https://redirect.github.com/google/flatbuffers/issues/8873">#8873</a>)</li>
<li><a
href="0723245085"><code>0723245</code></a>
[Swift] Fixes bazel.build file allowing it to find Vectors folder in
8.5.0 (#...</li>
<li><a
href="9d64b9c0c0"><code>9d64b9c</code></a>
fix(go): add bounds checking to ByteVector (<a
href="https://redirect.github.com/google/flatbuffers/issues/8776">#8776</a>)</li>
<li><a
href="d01f20f2fb"><code>d01f20f</code></a>
Fix python generation with nested flatbuffers (<a
href="https://redirect.github.com/google/flatbuffers/issues/8854">#8854</a>)</li>
<li><a
href="7e163021e5"><code>7e16302</code></a>
FlatBuffers Version 25.12.19 (<a
href="https://redirect.github.com/google/flatbuffers/issues/8871">#8871</a>)</li>
<li><a
href="57fdd4f995"><code>57fdd4f</code></a>
Default Vector Support C++ (<a
href="https://redirect.github.com/google/flatbuffers/issues/8870">#8870</a>)</li>
<li>Additional commits viewable in <a
href="a577050817...8914d06ab7">compare
view</a></li>
</ul>
</details>
<br />
Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.
[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)
---
<details>
<summary>Dependabot commands and options</summary>
<br />
You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after
your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge
and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating
it. You can achieve the same result by closing it manually
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)
</details>
This PR fixes several things related to threads emulation:
1. Support `SameTebFlags.InitialThread`
This flag is needed to support emulation of .net executables (not yet
fully supported) that don't have an entry point set in `PE` header. This
applies to both `PE32` and `PE64` executables. If `InitialThread` is set
the loader substitutes an entry point of the .net executable with
`mscoree.dll!_CorExeMain`.
2. Fix static thread local storage for `WOW64`
This fix resolves `shell32.dll` initialization on `WOW64`. This fix also
uses correct structure and field names that are obtained from the
corresponding `.pdb` files.
3. Fix dynamic thread local storage for `WOW64`
4. Fix setting argument of a `WOW64` thread start proc
5. Fix creating suspended thread and parse create_flags
Currently creating suspended thread doesn't work because
`NtCreateThreadEx` handler uses invalid flag `CREATE_SUSPENDED`. This PR
fixes that, and moreover it carefully parses create_flags of the
`NtCreateThreadEx` call.
6. Fix `FS` and `GS` handling
This PR fixes several problems with `GS` and `FS` segments:
* Wrong GDT descriptor for selector 0x53
* Update GDT descriptor for selector 0x53 for a `WOW64` process every
context switch like Windows does
* Set `GS` base when `GS` segment register is updated in 64-bit code
(code selector is `0x33`). When `GS` segment register is loaded with
correct selector (`0x2b`) `GS` base is set to 0. So, when the code
accesses something like `gs:[0]`, a page fault occurs. `KiPageFault`
handles this situation and sets correct `GS` base.
Also, take into account that `teb64.ExceptionList` initially contains
`teb32` address for `WOW64` process. This is used to setup `FS` base
when `wrfsbase` instruction is available. We can enable this instruction
using `kusd.ProcessorFeatures.arr[PF_RDWRFSGSBASE_AVAILABLE] = 1;` and
this work perfectly with `unicorn` backend. Unfortunately `icicle`
backend does not support `wrfsbase`, so I don't enable this instruction
by default.
This flag is needed to suport emulation of .net executables
that don't have an entry point set in PE header. This applies
to both PE32 and PE64 executables. If InitialThread is set
the loader substitutes an entry point of the .net executable
with mscoree.dll!_CorExeMain.