diff options
| author | ptitSeb <sebastien.chev@gmail.com> | 2024-12-13 16:42:21 +0100 |
|---|---|---|
| committer | ptitSeb <sebastien.chev@gmail.com> | 2024-12-13 16:42:21 +0100 |
| commit | 5bf154195d7be2db877f55a3ee541c9a64ebe4e9 (patch) | |
| tree | 75a66292a44a45d703ae0353e9f5f795f57134e8 | |
| parent | 0239305f69dbafc701eb8f9ec63723dc70abf9b5 (diff) | |
| download | box64-5bf154195d7be2db877f55a3ee541c9a64ebe4e9.tar.gz box64-5bf154195d7be2db877f55a3ee541c9a64ebe4e9.zip | |
[BOX32][WRAPPER] Added a few more 32bits wrapped libc functions
| -rw-r--r-- | src/wrapped32/generated/functions_list.txt | 7 | ||||
| -rw-r--r-- | src/wrapped32/generated/wrappedlibctypes32.h | 6 | ||||
| -rw-r--r-- | src/wrapped32/generated/wrapper32.c | 2 | ||||
| -rw-r--r-- | src/wrapped32/generated/wrapper32.h | 1 | ||||
| -rwxr-xr-x | src/wrapped32/wrappedlibc.c | 17 | ||||
| -rwxr-xr-x | src/wrapped32/wrappedlibc_private.h | 6 |
6 files changed, 32 insertions, 7 deletions
diff --git a/src/wrapped32/generated/functions_list.txt b/src/wrapped32/generated/functions_list.txt index 7905325b..c610718c 100644 --- a/src/wrapped32/generated/functions_list.txt +++ b/src/wrapped32/generated/functions_list.txt @@ -920,6 +920,7 @@ #() iFpppi -> iFpppi #() iFpppu -> iFpppu #() iEpppL -> iEpppL +#() iEpppp -> iEpppp #() iFpppp -> iFpppp #() iESpiL -> iESpiL #() iFXiii -> iFXiii @@ -1930,13 +1931,14 @@ wrappedlibc: - pFL: - _ZGTtnaX - _ZGTtnam -- pFp: - - gethostbyname - pEp: + - getgrnam - getprotobyname - getpwnam - gmtime - localtime +- pFp: + - gethostbyname - pES: - getmntent - iEbp_: @@ -1995,6 +1997,7 @@ wrappedlibc: - vEipp: - vsyslog - vEipV: + - syslog - vEpuu: - vEpup: - _ITM_addUserCommitAction diff --git a/src/wrapped32/generated/wrappedlibctypes32.h b/src/wrapped32/generated/wrappedlibctypes32.h index c5b6db2d..25ad6055 100644 --- a/src/wrapped32/generated/wrappedlibctypes32.h +++ b/src/wrapped32/generated/wrappedlibctypes32.h @@ -32,8 +32,8 @@ typedef void* (*pEu_t)(uint32_t); typedef void* (*pFu_t)(uint32_t); typedef void* (*pEL_t)(uintptr_t); typedef void* (*pFL_t)(uintptr_t); -typedef void* (*pFp_t)(void*); typedef void* (*pEp_t)(void*); +typedef void* (*pFp_t)(void*); typedef void* (*pES_t)(void*); typedef int32_t (*iEbp__t)(struct_p_t*); typedef void* (*pErl__t)(struct_l_t*); @@ -160,11 +160,12 @@ typedef int32_t (*iFpuippupp_t)(void*, uint32_t, int32_t, void*, void*, uint32_t GO(_ZGTtnaj, pFu_t) \ GO(_ZGTtnaX, pFL_t) \ GO(_ZGTtnam, pFL_t) \ - GO(gethostbyname, pFp_t) \ + GO(getgrnam, pEp_t) \ GO(getprotobyname, pEp_t) \ GO(getpwnam, pEp_t) \ GO(gmtime, pEp_t) \ GO(localtime, pEp_t) \ + GO(gethostbyname, pFp_t) \ GO(getmntent, pES_t) \ GO(getifaddrs, iEbp__t) \ GO(ctime, pErl__t) \ @@ -196,6 +197,7 @@ typedef int32_t (*iFpuippupp_t)(void*, uint32_t, int32_t, void*, void*, uint32_t GO(gmtime_r, pEpp_t) \ GO(localtime_r, pEpp_t) \ GO(vsyslog, vEipp_t) \ + GO(syslog, vEipV_t) \ GO(_ITM_addUserCommitAction, vEpup_t) \ GO(posix_spawn_file_actions_adddup2, iEpii_t) \ GO(regcomp, iEppi_t) \ diff --git a/src/wrapped32/generated/wrapper32.c b/src/wrapped32/generated/wrapper32.c index 8b6ba9c0..351d4b9b 100644 --- a/src/wrapped32/generated/wrapper32.c +++ b/src/wrapped32/generated/wrapper32.c @@ -1011,6 +1011,7 @@ typedef int32_t (*iFppLi_t)(void*, void*, uintptr_t, int32_t); typedef int32_t (*iFpppi_t)(void*, void*, void*, int32_t); typedef int32_t (*iFpppu_t)(void*, void*, void*, uint32_t); typedef int32_t (*iEpppL_t)(void*, void*, void*, uintptr_t); +typedef int32_t (*iEpppp_t)(void*, void*, void*, void*); typedef int32_t (*iFpppp_t)(void*, void*, void*, void*); typedef int32_t (*iESpiL_t)(void*, void*, int32_t, uintptr_t); typedef int32_t (*iFXiii_t)(void*, int32_t, int32_t, int32_t); @@ -2771,6 +2772,7 @@ void iFppLi_32(x64emu_t *emu, uintptr_t fcn) { iFppLi_t fn = (iFppLi_t)fcn; R_EA void iFpppi_32(x64emu_t *emu, uintptr_t fcn) { iFpppi_t fn = (iFpppi_t)fcn; R_EAX = fn(from_ptriv(R_ESP + 4), from_ptriv(R_ESP + 8), from_ptriv(R_ESP + 12), from_ptri(int32_t, R_ESP + 16)); } void iFpppu_32(x64emu_t *emu, uintptr_t fcn) { iFpppu_t fn = (iFpppu_t)fcn; R_EAX = fn(from_ptriv(R_ESP + 4), from_ptriv(R_ESP + 8), from_ptriv(R_ESP + 12), from_ptri(uint32_t, R_ESP + 16)); } void iEpppL_32(x64emu_t *emu, uintptr_t fcn) { iEpppL_t fn = (iEpppL_t)fcn; errno = emu->libc_err; R_EAX = fn(from_ptriv(R_ESP + 4), from_ptriv(R_ESP + 8), from_ptriv(R_ESP + 12), from_ulong(from_ptri(ulong_t, R_ESP + 16))); emu->libc_err = errno; } +void iEpppp_32(x64emu_t *emu, uintptr_t fcn) { iEpppp_t fn = (iEpppp_t)fcn; errno = emu->libc_err; R_EAX = fn(from_ptriv(R_ESP + 4), from_ptriv(R_ESP + 8), from_ptriv(R_ESP + 12), from_ptriv(R_ESP + 16)); emu->libc_err = errno; } void iFpppp_32(x64emu_t *emu, uintptr_t fcn) { iFpppp_t fn = (iFpppp_t)fcn; R_EAX = fn(from_ptriv(R_ESP + 4), from_ptriv(R_ESP + 8), from_ptriv(R_ESP + 12), from_ptriv(R_ESP + 16)); } void iESpiL_32(x64emu_t *emu, uintptr_t fcn) { iESpiL_t fn = (iESpiL_t)fcn; errno = emu->libc_err; R_EAX = fn(io_convert32(from_ptriv(R_ESP + 4)), from_ptriv(R_ESP + 8), from_ptri(int32_t, R_ESP + 12), from_ulong(from_ptri(ulong_t, R_ESP + 16))); emu->libc_err = errno; } void iFXiii_32(x64emu_t *emu, uintptr_t fcn) { iFXiii_t fn = (iFXiii_t)fcn; R_EAX = fn(getDisplay(from_ptriv(R_ESP + 4)), from_ptri(int32_t, R_ESP + 8), from_ptri(int32_t, R_ESP + 12), from_ptri(int32_t, R_ESP + 16)); } diff --git a/src/wrapped32/generated/wrapper32.h b/src/wrapped32/generated/wrapper32.h index 51d50e4a..0ac3fc19 100644 --- a/src/wrapped32/generated/wrapper32.h +++ b/src/wrapped32/generated/wrapper32.h @@ -961,6 +961,7 @@ void iFppLi_32(x64emu_t *emu, uintptr_t fnc); void iFpppi_32(x64emu_t *emu, uintptr_t fnc); void iFpppu_32(x64emu_t *emu, uintptr_t fnc); void iEpppL_32(x64emu_t *emu, uintptr_t fnc); +void iEpppp_32(x64emu_t *emu, uintptr_t fnc); void iFpppp_32(x64emu_t *emu, uintptr_t fnc); void iESpiL_32(x64emu_t *emu, uintptr_t fnc); void iFXiii_32(x64emu_t *emu, uintptr_t fnc); diff --git a/src/wrapped32/wrappedlibc.c b/src/wrapped32/wrappedlibc.c index 1456d4db..2aa9382a 100755 --- a/src/wrapped32/wrappedlibc.c +++ b/src/wrapped32/wrappedlibc.c @@ -728,6 +728,11 @@ EXPORT int my32_vsyslog(x64emu_t* emu, int priority, void* fmt, void* b) { PREPARE_VALIST_32; return vsyslog(priority, (const char*)fmt, VARARGS_32); } +EXPORT int my32_syslog(x64emu_t* emu, int priority, void* fmt, void* b) { + myStackAlign32((const char*)fmt, b, emu->scratch); + PREPARE_VALIST_32; + return vsyslog(priority, (const char*)fmt, VARARGS_32); +} EXPORT int my32___vsyslog_chk(x64emu_t* emu, int priority, int flag, void* fmt, void* b) { myStackAlign32((const char*)fmt, b, emu->scratch); PREPARE_VALIST_32; @@ -2263,6 +2268,18 @@ EXPORT int my32_getgrnam_r(x64emu_t* emu, const char* name, struct i386_group *g return ret; } +EXPORT void* my32_getgrnam(x64emu_t* emu, void* name) +{ + static struct i386_group ret; + struct group *grp = getgrnam(name); + if(!grp) return NULL; + ret.gr_name = to_ptrv(grp->gr_name); + ret.gr_passwd = to_ptrv(grp->gr_passwd); + ret.gr_gid = grp->gr_gid; + ret.gr_mem = to_ptrv(grp->gr_mem); + return &ret; +} + EXPORT int my32_getgrgid_r(x64emu_t* emu, gid_t gid, struct i386_group *grp, char *buf, size_t buflen, ptr_t* result) { struct group _result = {0}; diff --git a/src/wrapped32/wrappedlibc_private.h b/src/wrapped32/wrappedlibc_private.h index 4766b578..b7c539e4 100755 --- a/src/wrapped32/wrappedlibc_private.h +++ b/src/wrapped32/wrappedlibc_private.h @@ -494,7 +494,7 @@ GOW(getgid, uEv) // getgrent_r //GO(getgrgid, pEu) GOM(getgrgid_r, iEEuppLp) -//GO(getgrnam, pEp) +GOM(getgrnam, pEEp) GOM(getgrnam_r, iEEpppLp) GO(getgrouplist, iEpipp) GOW(getgroups, iEip) @@ -709,7 +709,7 @@ GO(inet_pton, iEipp) // initstate // Weak //GOW(initstate_r, iEupup) // inl // Weak -// innetgr +GO(innetgr, iEpppp) GO(inotify_add_watch, iEipu) GO(inotify_init, iEv) GO(inotify_init1, iEi) @@ -1789,7 +1789,7 @@ GO2(__sysconf, lEEi, my_sysconf) //DATA(_sys_errlist, 4) //DATA(sys_errlist, 4) GOM(sysinfo, iEp) //%noE -//GO2(syslog, vEipV, vsyslog) +GOM(syslog, vEEipV) GOM(__syslog_chk, vEEiipV) //DATA(_sys_nerr, 4) // type R //DATA(sys_nerr, 4) // type R |