diff options
| author | ptitSeb <sebastien.chev@gmail.com> | 2024-10-13 17:44:14 +0200 |
|---|---|---|
| committer | ptitSeb <sebastien.chev@gmail.com> | 2024-10-13 17:44:14 +0200 |
| commit | d30488da87314d990408a6b4687baaf817ef8631 (patch) | |
| tree | 96e3b59b075d638e715c61fad13c9db057d2517c /src | |
| parent | 59ba2fc7ab69ecdc629a99ade965c436810c6cc8 (diff) | |
| download | box64-d30488da87314d990408a6b4687baaf817ef8631.tar.gz box64-d30488da87314d990408a6b4687baaf817ef8631.zip | |
[BOX32] Added some more 32bits wrapped function to libc
Diffstat (limited to 'src')
| -rw-r--r-- | src/wrapped32/generated/functions_list.txt | 8 | ||||
| -rw-r--r-- | src/wrapped32/generated/wrappedlibctypes32.h | 7 | ||||
| -rw-r--r-- | src/wrapped32/generated/wrappedlibrttypes32.h | 4 | ||||
| -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 | 21 | ||||
| -rwxr-xr-x | src/wrapped32/wrappedlibc_private.h | 16 | ||||
| -rwxr-xr-x | src/wrapped32/wrappedlibrt_private.h | 1 |
8 files changed, 50 insertions, 10 deletions
diff --git a/src/wrapped32/generated/functions_list.txt b/src/wrapped32/generated/functions_list.txt index 4e35a471..933b1175 100644 --- a/src/wrapped32/generated/functions_list.txt +++ b/src/wrapped32/generated/functions_list.txt @@ -1288,6 +1288,7 @@ #() iFXpLiWwL -> iFXpLiWwL #() iFXpLuuii -> iFXpLuuii #() uFuippppp -> uFuippppp +#() lFEipLpLL -> lFEipLpLL #() pFEpiiiiu -> pFEpiiiiu #() pFEpLiiii -> pFEpLiiii #() pFEpLiiiI -> pFEpLiiiI @@ -1667,6 +1668,7 @@ wrappedlibc: - backtrace_symbols - pFpp: - __cmsg_nxthdr + - __gmtime_r - gmtime_r - localtime_r - SFpp: @@ -1688,6 +1690,7 @@ wrappedlibc: - iFppp: - vswscanf - iFppV: + - __isoc99_fscanf - swscanf - iFpON: - iFSpp: @@ -1749,6 +1752,9 @@ wrappedlibc: - gethostbyname_r - iFpppppp: - posix_spawn +- lFipLpLL: + - process_vm_readv + - process_vm_writev - pFpLiiiI: - pFpLiiil: - iFpippppp: @@ -2007,6 +2013,8 @@ wrappedlibpthread: - iFBh_ppp: - pthread_create wrappedlibrt: +- iFuBLL_: + - __clock_gettime wrappedlibuuid: wrappedlibx11: - vFp: diff --git a/src/wrapped32/generated/wrappedlibctypes32.h b/src/wrapped32/generated/wrappedlibctypes32.h index 7ab82cf9..ae96c885 100644 --- a/src/wrapped32/generated/wrappedlibctypes32.h +++ b/src/wrapped32/generated/wrappedlibctypes32.h @@ -103,6 +103,7 @@ typedef int32_t (*iFpLiipV_t)(void*, uintptr_t, int32_t, int32_t, void*, ...); typedef int32_t (*iFpLiLpV_t)(void*, uintptr_t, int32_t, uintptr_t, void*, ...); typedef int32_t (*iFpppupp_t)(void*, void*, void*, uint32_t, void*, void*); typedef int32_t (*iFpppppp_t)(void*, void*, void*, void*, void*, void*); +typedef intptr_t (*lFipLpLL_t)(int32_t, void*, uintptr_t, void*, uintptr_t, uintptr_t); typedef void* (*pFpLiiiI_t)(void*, uintptr_t, int32_t, int32_t, int32_t, int64_t); typedef void* (*pFpLiiil_t)(void*, uintptr_t, int32_t, int32_t, int32_t, intptr_t); typedef int32_t (*iFpippppp_t)(void*, int32_t, void*, void*, void*, void*, void*); @@ -150,12 +151,14 @@ typedef int32_t (*iFpLiLppp_t)(void*, uintptr_t, int32_t, uintptr_t, void*, void GO(signal, pFip_t) \ GO(backtrace_symbols, pFpi_t) \ GO(__cmsg_nxthdr, pFpp_t) \ + GO(__gmtime_r, pFpp_t) \ GO(gmtime_r, pFpp_t) \ GO(localtime_r, pFpp_t) \ GO(vsyslog, vFipp_t) \ GO(_ITM_addUserCommitAction, vFpup_t) \ GO(posix_spawn_file_actions_adddup2, iFpii_t) \ GO(vswscanf, iFppp_t) \ + GO(__isoc99_fscanf, iFppV_t) \ GO(swscanf, iFppV_t) \ GO(fscanf, iFSpV_t) \ GO(recvmsg, lFipi_t) \ @@ -176,6 +179,8 @@ typedef int32_t (*iFpLiLppp_t)(void*, uintptr_t, int32_t, uintptr_t, void*, void GO(getgrnam_r, iFpppLp_t) \ GO(getpwnam_r, iFpppLp_t) \ GO(gethostbyname_r, iFpppupp_t) \ - GO(posix_spawn, iFpppppp_t) + GO(posix_spawn, iFpppppp_t) \ + GO(process_vm_readv, lFipLpLL_t) \ + GO(process_vm_writev, lFipLpLL_t) #endif // __wrappedlibcTYPES32_H_ diff --git a/src/wrapped32/generated/wrappedlibrttypes32.h b/src/wrapped32/generated/wrappedlibrttypes32.h index 97842443..5865fb25 100644 --- a/src/wrapped32/generated/wrappedlibrttypes32.h +++ b/src/wrapped32/generated/wrappedlibrttypes32.h @@ -11,7 +11,9 @@ #define ADDED_FUNCTIONS() #endif +typedef int32_t (*iFuBLL__t)(uint32_t, struct_LL_t*); -#define SUPER() ADDED_FUNCTIONS() +#define SUPER() ADDED_FUNCTIONS() \ + GO(__clock_gettime, iFuBLL__t) #endif // __wrappedlibrtTYPES32_H_ diff --git a/src/wrapped32/generated/wrapper32.c b/src/wrapped32/generated/wrapper32.c index b3b8d5b1..57cc0741 100644 --- a/src/wrapped32/generated/wrapper32.c +++ b/src/wrapped32/generated/wrapper32.c @@ -1378,6 +1378,7 @@ typedef int32_t (*iFXpiipii_t)(void*, void*, int32_t, int32_t, void*, int32_t, i typedef int32_t (*iFXpLiWwL_t)(void*, void*, uintptr_t, int32_t, uint16_t, int16_t, uintptr_t); typedef int32_t (*iFXpLuuii_t)(void*, void*, uintptr_t, uint32_t, uint32_t, int32_t, int32_t); typedef uint32_t (*uFuippppp_t)(uint32_t, int32_t, void*, void*, void*, void*, void*); +typedef intptr_t (*lFEipLpLL_t)(x64emu_t*, int32_t, void*, uintptr_t, void*, uintptr_t, uintptr_t); typedef void* (*pFEpiiiiu_t)(x64emu_t*, void*, int32_t, int32_t, int32_t, int32_t, uint32_t); typedef void* (*pFEpLiiii_t)(x64emu_t*, void*, uintptr_t, int32_t, int32_t, int32_t, int32_t); typedef void* (*pFEpLiiiI_t)(x64emu_t*, void*, uintptr_t, int32_t, int32_t, int32_t, int64_t); @@ -2878,6 +2879,7 @@ void iFXpiipii_32(x64emu_t *emu, uintptr_t fcn) { iFXpiipii_t fn = (iFXpiipii_t) void iFXpLiWwL_32(x64emu_t *emu, uintptr_t fcn) { iFXpLiWwL_t fn = (iFXpLiWwL_t)fcn; R_EAX = fn(getDisplay(from_ptriv(R_ESP + 4)), from_ptriv(R_ESP + 8), from_ulong(from_ptri(ulong_t, R_ESP + 12)), from_ptri(int32_t, R_ESP + 16), from_ptri(uint16_t, R_ESP + 20), from_ptri(int16_t, R_ESP + 24), from_ulong(from_ptri(ulong_t, R_ESP + 28))); } void iFXpLuuii_32(x64emu_t *emu, uintptr_t fcn) { iFXpLuuii_t fn = (iFXpLuuii_t)fcn; R_EAX = fn(getDisplay(from_ptriv(R_ESP + 4)), from_ptriv(R_ESP + 8), from_ulong(from_ptri(ulong_t, R_ESP + 12)), from_ptri(uint32_t, R_ESP + 16), from_ptri(uint32_t, R_ESP + 20), from_ptri(int32_t, R_ESP + 24), from_ptri(int32_t, R_ESP + 28)); } void uFuippppp_32(x64emu_t *emu, uintptr_t fcn) { uFuippppp_t fn = (uFuippppp_t)fcn; R_EAX = (uint32_t)fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptriv(R_ESP + 12), from_ptriv(R_ESP + 16), from_ptriv(R_ESP + 20), from_ptriv(R_ESP + 24), from_ptriv(R_ESP + 28)); } +void lFEipLpLL_32(x64emu_t *emu, uintptr_t fcn) { lFEipLpLL_t fn = (lFEipLpLL_t)fcn; R_EAX = to_long(fn(emu, from_ptri(int32_t, R_ESP + 4), from_ptriv(R_ESP + 8), from_ulong(from_ptri(ulong_t, R_ESP + 12)), from_ptriv(R_ESP + 16), from_ulong(from_ptri(ulong_t, R_ESP + 20)), from_ulong(from_ptri(ulong_t, R_ESP + 24)))); } void pFEpiiiiu_32(x64emu_t *emu, uintptr_t fcn) { pFEpiiiiu_t fn = (pFEpiiiiu_t)fcn; R_EAX = to_ptrv(fn(emu, 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), from_ptri(int32_t, R_ESP + 20), from_ptri(uint32_t, R_ESP + 24))); } void pFEpLiiii_32(x64emu_t *emu, uintptr_t fcn) { pFEpLiiii_t fn = (pFEpLiiii_t)fcn; R_EAX = to_ptrv(fn(emu, from_ptriv(R_ESP + 4), from_ulong(from_ptri(ulong_t, R_ESP + 8)), from_ptri(int32_t, R_ESP + 12), from_ptri(int32_t, R_ESP + 16), from_ptri(int32_t, R_ESP + 20), from_ptri(int32_t, R_ESP + 24))); } void pFEpLiiiI_32(x64emu_t *emu, uintptr_t fcn) { pFEpLiiiI_t fn = (pFEpLiiiI_t)fcn; R_EAX = to_ptrv(fn(emu, from_ptriv(R_ESP + 4), from_ulong(from_ptri(ulong_t, R_ESP + 8)), from_ptri(int32_t, R_ESP + 12), from_ptri(int32_t, R_ESP + 16), from_ptri(int32_t, R_ESP + 20), from_ptri(int64_t, R_ESP + 24))); } diff --git a/src/wrapped32/generated/wrapper32.h b/src/wrapped32/generated/wrapper32.h index 450a2b7d..9922919d 100644 --- a/src/wrapped32/generated/wrapper32.h +++ b/src/wrapped32/generated/wrapper32.h @@ -1329,6 +1329,7 @@ void iFXpiipii_32(x64emu_t *emu, uintptr_t fnc); void iFXpLiWwL_32(x64emu_t *emu, uintptr_t fnc); void iFXpLuuii_32(x64emu_t *emu, uintptr_t fnc); void uFuippppp_32(x64emu_t *emu, uintptr_t fnc); +void lFEipLpLL_32(x64emu_t *emu, uintptr_t fnc); void pFEpiiiiu_32(x64emu_t *emu, uintptr_t fnc); void pFEpLiiii_32(x64emu_t *emu, uintptr_t fnc); void pFEpLiiiI_32(x64emu_t *emu, uintptr_t fnc); diff --git a/src/wrapped32/wrappedlibc.c b/src/wrapped32/wrappedlibc.c index cc1f42e3..935a88dc 100755 --- a/src/wrapped32/wrappedlibc.c +++ b/src/wrapped32/wrappedlibc.c @@ -2936,6 +2936,27 @@ EXPORT int my32_sysinfo(struct sysinfo_32* p) p->mem_unit = info.mem_unit; return ret; } + +EXPORT ssize_t my32_process_vm_readv(x64emu_t* emu, int pid, struct i386_iovec* local_iovec, size_t liovect, struct i386_iovec* remote_iovec, size_t riovect, unsigned long flags) +{ + struct iovec local_iovec_l[liovect]; + struct iovec remove_iovec_l[riovect]; + for (int i=0; i<liovect; ++i) + AlignIOV_32(local_iovec_l+i, local_iovec+i); + for (int i=0; i<riovect; ++i) + AlignIOV_32(remove_iovec_l+i, remote_iovec+i); + return process_vm_readv(pid, local_iovec_l, liovect, remove_iovec_l, riovect, flags); +} +EXPORT ssize_t my32_process_vm_writev(x64emu_t* emu, int pid, struct i386_iovec* local_iovec, size_t liovect, struct i386_iovec* remote_iovec, size_t riovect, unsigned long flags) +{ + struct iovec local_iovec_l[liovect]; + struct iovec remove_iovec_l[riovect]; + for (int i=0; i<liovect; ++i) + AlignIOV_32(local_iovec_l+i, local_iovec+i); + for (int i=0; i<riovect; ++i) + AlignIOV_32(remove_iovec_l+i, remote_iovec+i); + return process_vm_writev(pid, local_iovec_l, liovect, remove_iovec_l, riovect, flags); +} #if 0 #ifndef __NR_memfd_create #define MFD_CLOEXEC 0x0001U diff --git a/src/wrapped32/wrappedlibc_private.h b/src/wrapped32/wrappedlibc_private.h index ea2b8c5d..e30a9ce9 100755 --- a/src/wrapped32/wrappedlibc_private.h +++ b/src/wrapped32/wrappedlibc_private.h @@ -625,7 +625,7 @@ GO(getxattr, iFpppL) //GO(globfree64, vFp) // glob_pattern_p // Weak GOM(gmtime, pFEp) -//GO(__gmtime_r, pFpp) +GO2(__gmtime_r, pFpp, my32_gmtime_r) GOWM(gmtime_r, pFEpp) GO(gnu_dev_major, uFU) GO(gnu_dev_makedev, UFuu) @@ -664,7 +664,7 @@ GO(iconv_open, pFpp) //GO(if_nametoindex, uFp) // imaxabs // Weak GOWS(imaxdiv, pFpII) //%% -//DATA(in6addr_any, 16) // type R +DATA(in6addr_any, 16) // type R //DATA(in6addr_loopback, 16) // type R // inb // Weak //GOW(index, pFpi) @@ -888,7 +888,7 @@ GOW(isnanf, iFf) GO(__isnanf, iFf) // isnanl // Weak // __isnanl -//GOM(__isoc99_fscanf, iFEppV) //%% +GO2(__isoc99_fscanf, iFEppV, my32_fscanf) // __isoc99_fwscanf // __isoc99_scanf GOM(__isoc99_sscanf, iFEppV) //%% @@ -1393,7 +1393,7 @@ GO(renameat, iFipip) // re_set_registers // Weak GOW(re_set_syntax, LFL) // _res_hconf // type B -//GO(__res_iclose, vFpi) +GO(__res_iclose, vFpi) GO(__res_init, iFv) //GO(__res_maybe_init, iFpi) //GO(__res_nclose, vFp) @@ -1452,8 +1452,8 @@ GO(__sched_setscheduler, iFiip) GOW(sched_setscheduler, iFiip) GO(__sched_yield, iFv) GOW(sched_yield, iFv) -GO(__secure_getenv, pFp) -GO(secure_getenv, pFp) +GO(__secure_getenv, tFp) +GO(secure_getenv, tFp) // seed48 // seed48_r // Weak //GO(seekdir, vFpi) @@ -2131,8 +2131,8 @@ GOM(__fdelt_chk, LFL) //%%,noE GOM(getauxval, LFEL) //%% implemented since glibc 2.16 //GOM(prlimit64, lFpupp) //%%,noE -//GO(process_vm_readv, lFipLpLL) -//GO(process_vm_writev, lFipLpLL) +GOM(process_vm_readv, lFEipLpLL) +GOM(process_vm_writev, lFEipLpLL) //GOM(reallocarray, pFpLL) //%%,noE //GOM(__open_nocancel, iFEpOV) //%% //GO2(__read_nocancel, lFipL, read) diff --git a/src/wrapped32/wrappedlibrt_private.h b/src/wrapped32/wrappedlibrt_private.h index 2a34804d..ae7046d5 100755 --- a/src/wrapped32/wrappedlibrt_private.h +++ b/src/wrapped32/wrappedlibrt_private.h @@ -26,6 +26,7 @@ GO(aio_write64, iFp) GO(clock_getcpuclockid, iFup) GO(clock_getres, iFup) GO(clock_gettime, iFuBLL_) // *timespec +GO2(__clock_gettime, iFuBLL_, clock_gettime) GO(clock_nanosleep, iFuirLL_BLL_) //GO(clock_settime, iFup) // lio_listio |