78 Commits

Author SHA1 Message Date
Mark Street
bfa3da0d0e Add EnumSystemLocalesA stub 2023-11-26 17:22:25 +00:00
nocato
c6fa592a31
Handle dwCreationDisposition in CreateFileA to fix PSYLINK (#60)
Before this change, dwCreationDisposition parameter of CreateFileA was
ignored by wibo. However, it turns out that PSYLINK.EXE in PsyQ 4.4
sometimes depends on correct handling of that parameter.

When building overlays with PSYLINK.EXE, it sometimes opens the
resulting overlay file the second time, with OPEN_EXISTING creation
disposition (as opposed to TRUNCATE_EXISTING). Before the change,
wibo opened that file with fopen(..., "wb+") which truncated the file
even though OPEN_EXISTING (non-truncating) was requested. This affected
https://github.com/foxdieteam/mgs_reversing, where one of the overlays
(camera.bin) was built incorrectly when using wibo (worked correctly
on Windows or with wine).

This commit adds proper handling of dwCreationDisposition parameter.
The file now can be opened in truncating or non-truncating mode.
Additionally, the implementation now reacts correctly to file
existing/non-existing as specified by the requested creation disposition
mode. For example, if CreateFileA is called with OPEN_EXISTING and the
file does not exist it will set an error and not create a new file
(the previous behavior). If the file exists, it's opened in
non-truncating mode, as TRUNCATE_EXISTING or CREATE_ALWAYS is required
for truncation.

After the fix you can correctly build the whole mgs_reversing project
with wibo - tools running under wibo: ASMPSX, ASPSX, CC1PSX 4.0 & 4.4,
PSYLINK. I have NOT tested other executables apart from those.
0.6.9
2023-10-27 16:18:06 +09:00
Mark Street
2d627de537
Fix segfault in CoCreateInstance (#59)
* Fix segfault in CoCreateInstance

* update comment

* typo

* typo x2
0.6.8
2023-10-25 22:06:49 +01:00
Mark Street
0f8fb7f62d
Support ProDC NgcAs.exe (#57) 0.6.7 2023-10-22 09:11:00 +01:00
Mark Street
30ef434872
Add Fibre local storage (Fls*) functions for armcc (#55)
* Add Fibre local storage (Fls*) functions for armcc

* Update dll/kernel32.cpp

Co-authored-by: Simon Lindholm <simon.lindholm10@gmail.com>

* Update dll/kernel32.cpp

Co-authored-by: Simon Lindholm <simon.lindholm10@gmail.com>

* Update dll/kernel32.cpp

Co-authored-by: Simon Lindholm <simon.lindholm10@gmail.com>

* Update dll/kernel32.cpp

Co-authored-by: Simon Lindholm <simon.lindholm10@gmail.com>

* one more copypasta

---------

Co-authored-by: Simon Lindholm <simon.lindholm10@gmail.com>
0.6.6
2023-10-17 21:33:22 +01:00
EstexNT
a829d0d58b
Fix a use-after-free in CreateProcessA (#54)
Co-authored-by: Simon Lindholm <simon.lindholm10@gmail.com>
0.6.5
2023-10-17 19:39:28 +01:00
Simon Lindholm
90101d8bc1 Minor cppcheck lint fixes 2023-10-16 20:08:52 +02:00
Simon Lindholm
4bf81a9ec9 Fix ineffective "x < 0" comparisons in CompareString
Pointed out by cppcheck.
2023-10-16 20:08:52 +02:00
Simon Lindholm
b1dd93d7b7 Zero out TIB
Not for any particular reason, but having it contain non-deterministic
stack garbage seems like a bad idea.
2023-10-16 20:05:34 +02:00
Ethan Roseman
32887d2439
Add retrowin32 to related projects in README 2023-10-15 07:41:40 -04:00
c9d634876d
Handle special handle value from FindFirstFileA in FindNextFileA (#52) 0.6.4 2023-10-08 13:08:53 -04:00
97a5af2055
Build a wibo_debug binary as well (#51) 2023-10-08 12:46:26 -04:00
5a4af7d51b
Ensure we don't reallocate during 2GB address space block (#49)
* Ensure we don't reallocate during 2GB address space block

* Use std::string_view and std::from_chars to avoid allocations

* Use MAP_FIXED instead of MAP_FIXED_NOREPLACE

* Use raw syscalls and stack buffer

* Use exit(1)
0.6.3
2023-10-03 21:26:30 -04:00
c4de05946d
Fix TlsGetValue & more (#48)
`TlsGetValue` disambiguates 0 and an error by relying on `GetLastError`. Depending on the program state, `GetLastError` could be non-0, even though `TlsGetValue` succeeded. Resolve this by always setting `wibo::lastError`. This matches the behavior described by the documentation.

Additionally, when reading resources, later versions of mwcc and mwld call `GetModuleHandleA` with the program path, and then call `LoadStringA` on that handle. Support this behavior by _actually_ loading the PE at the path passed in to `GetModuleHandleA`, instead of assuming it's the current program.

(This is especially useful because sjiswrap relies on overriding `GetModuleFileNameA`, so the wrapped program reads its own resources, rather than sjiswrap's.)

Other small changes:
- Add ms-win-crt `exit` & run atexit funcs
- Implements vcruntime `memmove`
- Implements kernel32 `GetModuleFileNameA`
0.6.2
2023-10-01 23:56:35 -04:00
Ethan Roseman
8a6aacb82d
GetLocaleInfoW (#47)
* GetLocaleInfoW for ee-as.exe 991111b

* Try to do it the right way

* 3rd time's the charm?

* round 4

* it doesn't matter now what happens i will never give up the fight

* comments

* fin
0.6.1
2023-09-22 09:13:56 +09:00
ConorB
218b4d7d76
Implement enough process handling logic to make psyq4.0 happy (#46)
* Implement enough process handling logic to make psyq4.0 happy

* revert gitignore

* data type update

* PR review

* DEBUG_LOG mistake

---------

Co-authored-by: ConorBobbleHat <c.github@firstpartners.net>
0.6.0
2023-09-18 15:05:47 +09:00
Mark Street
ceb13b34de
Use correct token for docker deployment (#45)
* Use correct token for docker deployment

* Update link to gc_wii compilers

* Update deps in ci.yml too
0.5.2
2023-09-14 15:12:28 +01:00
Ethan Roseman
6a420668e5
CorExitProcess for armcc_41_1440 (#44)
* Implement CorExitProcess for armcc_41_1440

* Fix function signature, add dll coverage
2023-09-12 22:44:56 +09:00
d27fc944bd
Fix GetFullPathNameW, GetEnvironmentVariableW (#43) 0.5.1 2023-09-11 18:36:13 +09:00
Ethan Roseman
b7e8e5fb80
3 msvcrt funcs (#42)
* msvcrt funcs

* fix empty final line

* Promment
2023-09-11 04:22:01 +09:00
Anghelo Carvajal
a5499f27de
Fix SetFilePointerEx to return FALSE instead of INVALID_SET_FILE_POINTER (#41) 2023-09-10 21:54:25 +09:00
Ethan Roseman
8ab683e5c6
WiBo -> wibo 2023-09-10 13:14:45 +09:00
94b44fd697
Everything needed to run simple Rust programs (#40)
* Everything needed to run simple Rust programs

* Add IsDBCSLeadByte implementation

* Address PR comments
0.5.0
2023-09-10 12:07:23 +09:00
ConorB
6e18120410
Add armcc support (#39)
* armcc 5.04, ignore seh longjmps

* Update CI link

* Stub RtlUnwind entirely

---------

Co-authored-by: ConorBobbleHat <c.github@firstpartners.net>
2023-09-08 08:17:35 +09:00
ConorB
3e2d84fa69
Force VirtualAlloc allocations to fall below the 2GB mark (#36)
Co-authored-by: ConorBobbleHat <c.github@firstpartners.net>
0.4.2
2023-06-02 21:30:45 +02:00
Parker
e83af50b10
Properly implement GetCurrentProcessID, GetCurrentThreadId (#35) 2023-04-01 11:13:21 +02:00
7d08a2bdca
Various fixes for mwcc/mwld (#32)
* Override GetFileAttributesA for MWCC license.dat

* Add WIN_FUNC to FileTimeToLocalFileTime

* Use callee_pop_aggregate_return(0)

* Lexically normalize paths
0.4.1
2023-01-23 21:22:50 +01:00
6b6a462ea1
Use __attribute__((force_align_arg_pointer)) (#30) 2023-01-23 16:36:14 +01:00
9837ce0bf4
Pass absolute path to exe in argv[0] (#31) 2023-01-23 16:35:50 +01:00
67f99ba1b2
Build static binary (#29) v0.4.0 2023-01-23 10:20:30 +09:00
jdflyer
aec6f0dbe9
Implement GetShortPathNameA (#28) 2022-12-30 01:37:21 +01:00
Ryan Burns
635de4fa93
Handle GetCurrentDirectory required buffer size return value (#27)
When the output buffer size is too small, GetCurrentDirectory does
nothing and simply returns the larger required size.

https://learn.microsoft.com/en-us/windows/win32/api/winbase/nf-winbase-getcurrentdirectory#return-value

Needed to run Code Warrior 4 mwcc.exe with no arguments, displaying usage/help message.

(Still unable to compile/preprocess with CW4 mwcc.exe)
2022-12-02 10:46:38 +01:00
Ethan Roseman
681137902b
don't try to mmap 0-sized things (#26) 0.3.0 2022-09-25 02:03:40 +09:00
Ethan Roseman
b65a585ee3
Move docker build back a bit (#25) 2022-09-25 02:02:49 +09:00
Ethan Roseman
d631bad6b2
Build it on focal (#24)
* Build it on bionic

* no sudo

* cmake

* don't use ninja

* try focal

* model after #15

* Whoops

* lower minimum CMakeLists

* focal

* Fix

* debug yaml

* whut

* now?
0.2.6
2022-09-25 01:04:29 +09:00
Ethan Roseman
6de4e9a163
3 funcs needed for some mwcc compilers (#22)
* 3 funcs needed for some mwcc compilers

* some PR feedback

* lots more via pair programming with Simon

* cleanup, add test dir as an include dir for tests

* bugfix
0.2.5
2022-09-24 23:59:30 +09:00
Simon Lindholm
ffe30a626b Fix cmdline backslash escaping 0.2.4 2022-07-31 13:17:14 +02:00
Simon Lindholm
e54657b55f Misc minor improvements 2022-07-29 23:39:42 +02:00
Simon Lindholm
93b99a4f24 Handle some more armcc versions 2022-07-29 17:44:27 +02:00
Mark Street
bd4c09e743
Add naive VirtualFree (#20) 0.2.3 2022-07-28 00:23:45 +02:00
Simon Lindholm
c47665f8ae Improve TIB 2022-07-28 00:13:36 +02:00
Simon Lindholm
747f1895ef More logging 2022-07-27 23:04:26 +02:00
Simon Lindholm
42f2e6935e MessageBoxA 0.2.2 2022-07-27 21:27:27 +01:00
Simon Lindholm
ff947fb707 Fix Heap{Re,}Alloc 2022-07-27 21:27:27 +01:00
Mark Street
fa6c98406e A handful more functions to get cpe2exe to start 2022-07-27 21:27:27 +01:00
Simon Lindholm
ced712df09 Clean up function resolution a little 0.2.1 2022-07-18 23:02:55 +02:00
Mark Street
11bdc5e8a2
move dlls into dll/ dir (#16) 2022-07-18 09:54:17 -04:00
Ryan Burns
b86a542fe2
Explicitly link std::filesystem as needed (#14)
* Fix cmake install command

PROGRAMS specifies executable files, while TARGETS specifies cmake
targets. This install command happened to work when doing an in-tree
build (build dir == source dir) but will otherwise fail.

* Explicitly link std::filesystem as needed

On some older compilers, std::filesystem is provided as a separate
library from the C++ standard library. For example, on GCC 8, one must
explicitly link with -lstdc++fs.

We can use a drop-in https://github.com/vector-of-bool/CMakeCM module to
automate detection of and linking against this auxiliary library when needed.

* Add missing include

std::min is in <algorithm> header
This is transitively included in libstdc++ (GCC)
but not in libc++ (Clang)

(Encountered when testing -lc++fs auxiliary library linking in Clang 7)
0.2.0
2022-07-08 02:02:27 +09:00
Mark Street
e997178c57
Fix double ghcr.io in docker tag (#13) 2022-07-07 03:51:32 +09:00
Ethan Roseman
fae4219d7f
Revert "Add -lstdc++fs to cmake for older GCC (#11)" (#12)
This reverts commit 583769d7c88d82384ff32e7a39ed49e44c0b2577.
2022-07-07 03:26:16 +09:00