From 610c63cd151cdc0ea7712db5eebf0ed56f56da4e Mon Sep 17 00:00:00 2001 From: ptitSeb Date: Fri, 13 Dec 2024 15:38:13 +0100 Subject: [BOX32][WRAPPER] Added a few more libc and libresolv 32bits wrapped functions --- src/wrapped32/generated/functions_list.txt | 4 ++++ src/wrapped32/generated/wrappedlibresolvtypes32.h | 5 ++++- src/wrapped32/generated/wrapper32.c | 2 ++ src/wrapped32/generated/wrapper32.h | 1 + src/wrapped32/wrappedlibc_private.h | 14 +++++++------- src/wrapped32/wrappedlibresolv.c | 8 ++++++++ src/wrapped32/wrappedlibresolv_private.h | 4 ++-- 7 files changed, 28 insertions(+), 10 deletions(-) (limited to 'src/wrapped32') diff --git a/src/wrapped32/generated/functions_list.txt b/src/wrapped32/generated/functions_list.txt index c5efa3ab..9be1ed9d 100644 --- a/src/wrapped32/generated/functions_list.txt +++ b/src/wrapped32/generated/functions_list.txt @@ -1337,6 +1337,7 @@ #() iEEipiup -> iEEipiup #() iEEuppLp -> iEEuppLp #() iEEpiipi -> iEEpiipi +#() iFEpiipi -> iFEpiipi #() iEEpiipV -> iEEpiipV #() iFEpiuuu -> iFEpiuuu #() iEEpiLpp -> iEEpiLpp @@ -2321,6 +2322,9 @@ wrappedlibresolv: - iEpiipi: - __res_query - res_query + - res_search +- iFpiipi: + - __res_search wrappedlibrt: - iEuBLL_: - __clock_gettime diff --git a/src/wrapped32/generated/wrappedlibresolvtypes32.h b/src/wrapped32/generated/wrappedlibresolvtypes32.h index 548138a5..3df66b40 100644 --- a/src/wrapped32/generated/wrappedlibresolvtypes32.h +++ b/src/wrapped32/generated/wrappedlibresolvtypes32.h @@ -12,9 +12,12 @@ #endif typedef int32_t (*iEpiipi_t)(void*, int32_t, int32_t, void*, int32_t); +typedef int32_t (*iFpiipi_t)(void*, int32_t, int32_t, void*, int32_t); #define SUPER() ADDED_FUNCTIONS() \ GO(__res_query, iEpiipi_t) \ - GO(res_query, iEpiipi_t) + GO(res_query, iEpiipi_t) \ + GO(res_search, iEpiipi_t) \ + GO(__res_search, iFpiipi_t) #endif // __wrappedlibresolvTYPES32_H_ diff --git a/src/wrapped32/generated/wrapper32.c b/src/wrapped32/generated/wrapper32.c index ef540162..74871de6 100644 --- a/src/wrapped32/generated/wrapper32.c +++ b/src/wrapped32/generated/wrapper32.c @@ -1428,6 +1428,7 @@ typedef int32_t (*iEEiippi_t)(x64emu_t*, int32_t, int32_t, void*, void*, int32_t typedef int32_t (*iEEipiup_t)(x64emu_t*, int32_t, void*, int32_t, uint32_t, void*); typedef int32_t (*iEEuppLp_t)(x64emu_t*, uint32_t, void*, void*, uintptr_t, void*); typedef int32_t (*iEEpiipi_t)(x64emu_t*, void*, int32_t, int32_t, void*, int32_t); +typedef int32_t (*iFEpiipi_t)(x64emu_t*, void*, int32_t, int32_t, void*, int32_t); typedef int32_t (*iEEpiipV_t)(x64emu_t*, void*, int32_t, int32_t, void*, void*); typedef int32_t (*iFEpiuuu_t)(x64emu_t*, void*, int32_t, uint32_t, uint32_t, uint32_t); typedef int32_t (*iEEpiLpp_t)(x64emu_t*, void*, int32_t, uintptr_t, void*, void*); @@ -3145,6 +3146,7 @@ void iEEiippi_32(x64emu_t *emu, uintptr_t fcn) { iEEiippi_t fn = (iEEiippi_t)fcn void iEEipiup_32(x64emu_t *emu, uintptr_t fcn) { iEEipiup_t fn = (iEEipiup_t)fcn; errno = emu->libc_err; R_EAX = fn(emu, from_ptri(int32_t, R_ESP + 4), from_ptriv(R_ESP + 8), from_ptri(int32_t, R_ESP + 12), from_ptri(uint32_t, R_ESP + 16), from_ptriv(R_ESP + 20)); emu->libc_err = errno; } void iEEuppLp_32(x64emu_t *emu, uintptr_t fcn) { iEEuppLp_t fn = (iEEuppLp_t)fcn; errno = emu->libc_err; R_EAX = fn(emu, from_ptri(uint32_t, R_ESP + 4), from_ptriv(R_ESP + 8), from_ptriv(R_ESP + 12), from_ulong(from_ptri(ulong_t, R_ESP + 16)), from_ptriv(R_ESP + 20)); emu->libc_err = errno; } void iEEpiipi_32(x64emu_t *emu, uintptr_t fcn) { iEEpiipi_t fn = (iEEpiipi_t)fcn; errno = emu->libc_err; R_EAX = fn(emu, from_ptriv(R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptri(int32_t, R_ESP + 12), from_ptriv(R_ESP + 16), from_ptri(int32_t, R_ESP + 20)); emu->libc_err = errno; } +void iFEpiipi_32(x64emu_t *emu, uintptr_t fcn) { iFEpiipi_t fn = (iFEpiipi_t)fcn; R_EAX = fn(emu, from_ptriv(R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptri(int32_t, R_ESP + 12), from_ptriv(R_ESP + 16), from_ptri(int32_t, R_ESP + 20)); } void iEEpiipV_32(x64emu_t *emu, uintptr_t fcn) { iEEpiipV_t fn = (iEEpiipV_t)fcn; errno = emu->libc_err; R_EAX = fn(emu, from_ptriv(R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptri(int32_t, R_ESP + 12), from_ptriv(R_ESP + 16), from_ptrv(R_ESP + 20)); emu->libc_err = errno; } void iFEpiuuu_32(x64emu_t *emu, uintptr_t fcn) { iFEpiuuu_t fn = (iFEpiuuu_t)fcn; R_EAX = fn(emu, from_ptriv(R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptri(uint32_t, R_ESP + 12), from_ptri(uint32_t, R_ESP + 16), from_ptri(uint32_t, R_ESP + 20)); } void iEEpiLpp_32(x64emu_t *emu, uintptr_t fcn) { iEEpiLpp_t fn = (iEEpiLpp_t)fcn; errno = emu->libc_err; R_EAX = fn(emu, from_ptriv(R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ulong(from_ptri(ulong_t, R_ESP + 12)), from_ptriv(R_ESP + 16), from_ptriv(R_ESP + 20)); emu->libc_err = errno; } diff --git a/src/wrapped32/generated/wrapper32.h b/src/wrapped32/generated/wrapper32.h index 749ffb60..8a49f4ae 100644 --- a/src/wrapped32/generated/wrapper32.h +++ b/src/wrapped32/generated/wrapper32.h @@ -1378,6 +1378,7 @@ void iEEiippi_32(x64emu_t *emu, uintptr_t fnc); void iEEipiup_32(x64emu_t *emu, uintptr_t fnc); void iEEuppLp_32(x64emu_t *emu, uintptr_t fnc); void iEEpiipi_32(x64emu_t *emu, uintptr_t fnc); +void iFEpiipi_32(x64emu_t *emu, uintptr_t fnc); void iEEpiipV_32(x64emu_t *emu, uintptr_t fnc); void iFEpiuuu_32(x64emu_t *emu, uintptr_t fnc); void iEEpiLpp_32(x64emu_t *emu, uintptr_t fnc); diff --git a/src/wrapped32/wrappedlibc_private.h b/src/wrapped32/wrappedlibc_private.h index f528642b..4766b578 100755 --- a/src/wrapped32/wrappedlibc_private.h +++ b/src/wrapped32/wrappedlibc_private.h @@ -1128,7 +1128,7 @@ GO(mkstemp64, iEp) //GO(mktemp, pEp) GO(mktime, LEbiiiiiiiiilt_) GO(mlock, iEpL) -//GO(mlockall, iEi) +GO(mlockall, iEi) GOM(mmap, pEEpLiiil) //%% GOM(mmap64, pEEpLiiiI) //%% // modf // Weak @@ -1151,7 +1151,7 @@ GOWM(mremap, pEEpLLiN) //%% 5th hidden paramerer "void* new_addr" if flags is MR GOW(msync, iEpLi) // mtrace GO(munlock, iEpL) -//GO(munlockall, iEv) +GO(munlockall, iEv) GOM(munmap, iEEpL) //%% // muntrace GOWM(nanosleep, iErLL_BLL_) //%%,noE @@ -1260,14 +1260,14 @@ GO(posix_fallocate64, iEiII) GOW(posix_memalign, iEBp_LL) // posix_openpt // Weak GOM(posix_spawn, iEEpppppp) -// posix_spawnattr_destroy +GO(posix_spawnattr_destroy, iFp) // posix_spawnattr_getflags // posix_spawnattr_getpgroup // posix_spawnattr_getschedparam // posix_spawnattr_getschedpolicy // posix_spawnattr_getsigdefault // posix_spawnattr_getsigmask -// posix_spawnattr_init +GO(posix_spawnattr_init, iFp) // posix_spawnattr_setflags // posix_spawnattr_setpgroup // posix_spawnattr_setschedparam @@ -1449,8 +1449,8 @@ GO(__sched_cpucount, iEup) //GO(__sched_cpufree, vEp) GO(sched_getaffinity, iEiup) GO(sched_getcpu, iEv) -//GO(__sched_getparam, iEip) -//GOW(sched_getparam, iEip) +GO(__sched_getparam, iEip) +GOW(sched_getparam, iEip) GO(__sched_get_priority_max, iEi) GOW(sched_get_priority_max, iEi) GO(__sched_get_priority_min, iEi) @@ -1918,7 +1918,7 @@ GOWM(__vsnprintf, iEEpLpp) //%% GOM(__vsnprintf_chk, iEEpLiipp) //%% GOWM(vsprintf, iEEppp) //%% GOM(__vsprintf_chk, iEEpiLpp) //%% -//GOM(vsscanf, iEEppp) //%% +GOM(vsscanf, iEEppp) //%% // __vsscanf // Weak GOWM(vswprintf, iEEpLpp) //%% GOWM(__vswprintf, iEEpLpp) //%% diff --git a/src/wrapped32/wrappedlibresolv.c b/src/wrapped32/wrappedlibresolv.c index 7f7bf0e1..c314592e 100644 --- a/src/wrapped32/wrappedlibresolv.c +++ b/src/wrapped32/wrappedlibresolv.c @@ -37,4 +37,12 @@ EXPORT int my32_res_query(x64emu_t* emu, void* dname, int class, int type, void* return ret; } +EXPORT int my32_res_search(x64emu_t* emu, void* dname, int class, int type, void* answer, int anslen) +{ + convert_res_state_to_64(emu->res_state_64, emu->res_state_32); + int ret = my->__res_search(dname, class, type, answer, anslen); + emu->libc_herr = h_errno; + return ret; +} + #include "wrappedlib_init32.h" diff --git a/src/wrapped32/wrappedlibresolv_private.h b/src/wrapped32/wrappedlibresolv_private.h index a546082c..40448c05 100644 --- a/src/wrapped32/wrappedlibresolv_private.h +++ b/src/wrapped32/wrappedlibresolv_private.h @@ -96,8 +96,8 @@ GO2(__res_query, iEEpiipi, my32_res_query) GOWM(res_query, iEEpiipi) //GO2(__res_querydomain, iFppiipi, res_querydomain) //GOW(res_querydomain, iFppiipi) -//GO2(__res_search, iFpiipi, res_search) -//GOW(res_search, iFpiipi) +GO2(__res_search, iFEpiipi, my32_res_search) +GOWM(res_search, iEEpiipi) //GO(__res_send, iFpipi) //GO(res_send_setqhook, //GO(res_send_setrhook, -- cgit 1.4.1