diff options
| author | ptitSeb <sebastien.chev@gmail.com> | 2021-03-09 18:20:32 +0100 |
|---|---|---|
| committer | ptitSeb <sebastien.chev@gmail.com> | 2021-03-09 18:20:32 +0100 |
| commit | 85dfd5b9783208070155be3d4b0f374aaa6b2190 (patch) | |
| tree | a5554c75b031264cecacb2c91efa87fcb2559fed /src/wrapped | |
| parent | b23fcc83c1a5e5be3a60772835e40b7b3f664755 (diff) | |
| download | box64-85dfd5b9783208070155be3d4b0f374aaa6b2190.tar.gz box64-85dfd5b9783208070155be3d4b0f374aaa6b2190.zip | |
More wrapped libc functions
Diffstat (limited to 'src/wrapped')
| -rw-r--r-- | src/wrapped/generated/functions_list.txt | 3 | ||||
| -rw-r--r-- | src/wrapped/generated/wrapper.c | 5 | ||||
| -rw-r--r-- | src/wrapped/generated/wrapper.h | 3 | ||||
| -rwxr-xr-x | src/wrapped/wrappedlibc.c | 22 | ||||
| -rwxr-xr-x | src/wrapped/wrappedlibc_private.h | 8 |
5 files changed, 22 insertions, 19 deletions
diff --git a/src/wrapped/generated/functions_list.txt b/src/wrapped/generated/functions_list.txt index 571aba8c..c4963c84 100644 --- a/src/wrapped/generated/functions_list.txt +++ b/src/wrapped/generated/functions_list.txt @@ -190,6 +190,7 @@ #() iFiiu #() iFiip #() iFiuu +#() iFiLN #() iFipu #() iFipp #() iFuup @@ -495,6 +496,7 @@ #() iFEippp #() iFEpipi #() iFEpipp +#() iFEpLpp #() iFEppiV #() iFEpppp #() iFiiupp @@ -871,3 +873,4 @@ #() iFEvpp -> iFEpp #() iFEpvpp -> iFEppp #() iFEpvpV -> iFEppV +#() iFEpLvvpp -> iFEpLpp diff --git a/src/wrapped/generated/wrapper.c b/src/wrapped/generated/wrapper.c index fd8623a9..2d50729a 100644 --- a/src/wrapped/generated/wrapper.c +++ b/src/wrapped/generated/wrapper.c @@ -223,6 +223,7 @@ typedef int32_t (*iFiii_t)(int32_t, int32_t, int32_t); typedef int32_t (*iFiiu_t)(int32_t, int32_t, uint32_t); typedef int32_t (*iFiip_t)(int32_t, int32_t, void*); typedef int32_t (*iFiuu_t)(int32_t, uint32_t, uint32_t); +typedef int32_t (*iFiLN_t)(int32_t, uintptr_t, ...); typedef int32_t (*iFipu_t)(int32_t, void*, uint32_t); typedef int32_t (*iFipp_t)(int32_t, void*, void*); typedef int32_t (*iFuup_t)(uint32_t, uint32_t, void*); @@ -528,6 +529,7 @@ typedef void (*vFppppp_t)(void*, void*, void*, void*, void*); typedef int32_t (*iFEippp_t)(x64emu_t*, int32_t, void*, void*, void*); typedef int32_t (*iFEpipi_t)(x64emu_t*, void*, int32_t, void*, int32_t); typedef int32_t (*iFEpipp_t)(x64emu_t*, void*, int32_t, void*, void*); +typedef int32_t (*iFEpLpp_t)(x64emu_t*, void*, uintptr_t, void*, void*); typedef int32_t (*iFEppiV_t)(x64emu_t*, void*, void*, int32_t, void*); typedef int32_t (*iFEpppp_t)(x64emu_t*, void*, void*, void*, void*); typedef int32_t (*iFiiupp_t)(int32_t, int32_t, uint32_t, void*, void*); @@ -1096,6 +1098,7 @@ void iFiii(x64emu_t *emu, uintptr_t fcn) { iFiii_t fn = (iFiii_t)fcn; R_RAX=fn(( void iFiiu(x64emu_t *emu, uintptr_t fcn) { iFiiu_t fn = (iFiiu_t)fcn; R_RAX=fn((int32_t)R_RDI, (int32_t)R_RSI, (uint32_t)R_RDX); } void iFiip(x64emu_t *emu, uintptr_t fcn) { iFiip_t fn = (iFiip_t)fcn; R_RAX=fn((int32_t)R_RDI, (int32_t)R_RSI, (void*)R_RDX); } void iFiuu(x64emu_t *emu, uintptr_t fcn) { iFiuu_t fn = (iFiuu_t)fcn; R_RAX=fn((int32_t)R_RDI, (uint32_t)R_RSI, (uint32_t)R_RDX); } +void iFiLN(x64emu_t *emu, uintptr_t fcn) { iFiLN_t fn = (iFiLN_t)fcn; R_RAX=fn((int32_t)R_RDI, (uintptr_t)R_RSI, (void*)R_RDX); } void iFipu(x64emu_t *emu, uintptr_t fcn) { iFipu_t fn = (iFipu_t)fcn; R_RAX=fn((int32_t)R_RDI, (void*)R_RSI, (uint32_t)R_RDX); } void iFipp(x64emu_t *emu, uintptr_t fcn) { iFipp_t fn = (iFipp_t)fcn; R_RAX=fn((int32_t)R_RDI, (void*)R_RSI, (void*)R_RDX); } void iFuup(x64emu_t *emu, uintptr_t fcn) { iFuup_t fn = (iFuup_t)fcn; R_RAX=fn((uint32_t)R_RDI, (uint32_t)R_RSI, (void*)R_RDX); } @@ -1401,6 +1404,7 @@ void vFppppp(x64emu_t *emu, uintptr_t fcn) { vFppppp_t fn = (vFppppp_t)fcn; fn(( void iFEippp(x64emu_t *emu, uintptr_t fcn) { iFEippp_t fn = (iFEippp_t)fcn; R_RAX=fn(emu, (int32_t)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX); } void iFEpipi(x64emu_t *emu, uintptr_t fcn) { iFEpipi_t fn = (iFEpipi_t)fcn; R_RAX=fn(emu, (void*)R_RDI, (int32_t)R_RSI, (void*)R_RDX, (int32_t)R_RCX); } void iFEpipp(x64emu_t *emu, uintptr_t fcn) { iFEpipp_t fn = (iFEpipp_t)fcn; R_RAX=fn(emu, (void*)R_RDI, (int32_t)R_RSI, (void*)R_RDX, (void*)R_RCX); } +void iFEpLpp(x64emu_t *emu, uintptr_t fcn) { iFEpLpp_t fn = (iFEpLpp_t)fcn; R_RAX=fn(emu, (void*)R_RDI, (uintptr_t)R_RSI, (void*)R_RDX, (void*)R_RCX); } void iFEppiV(x64emu_t *emu, uintptr_t fcn) { iFEppiV_t fn = (iFEppiV_t)fcn; R_RAX=fn(emu, (void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (void*)(R_RSP + 8)); } void iFEpppp(x64emu_t *emu, uintptr_t fcn) { iFEpppp_t fn = (iFEpppp_t)fcn; R_RAX=fn(emu, (void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX); } void iFiiupp(x64emu_t *emu, uintptr_t fcn) { iFiiupp_t fn = (iFiiupp_t)fcn; R_RAX=fn((int32_t)R_RDI, (int32_t)R_RSI, (uint32_t)R_RDX, (void*)R_RCX, (void*)R_R8); } @@ -1784,3 +1788,4 @@ void pFppv(x64emu_t *emu, uintptr_t fcn) { pFpp_t fn = (pFpp_t)fcn; R_RAX=(uintp void iFEvpp(x64emu_t *emu, uintptr_t fcn) { iFEpp_t fn = (iFEpp_t)fcn; R_RAX=fn(emu, (void*)R_RSI, (void*)R_RDX); } void iFEpvpp(x64emu_t *emu, uintptr_t fcn) { iFEppp_t fn = (iFEppp_t)fcn; R_RAX=fn(emu, (void*)R_RDI, (void*)R_RDX, (void*)R_RCX); } void iFEpvpV(x64emu_t *emu, uintptr_t fcn) { iFEppV_t fn = (iFEppV_t)fcn; R_RAX=fn(emu, (void*)R_RDI, (void*)R_RDX, (void*)(R_RSP + 8)); } +void iFEpLvvpp(x64emu_t *emu, uintptr_t fcn) { iFEpLpp_t fn = (iFEpLpp_t)fcn; R_RAX=fn(emu, (void*)R_RDI, (uintptr_t)R_RSI, (void*)R_R8, (void*)R_R9); } diff --git a/src/wrapped/generated/wrapper.h b/src/wrapped/generated/wrapper.h index 20318ebc..0d8fd280 100644 --- a/src/wrapped/generated/wrapper.h +++ b/src/wrapped/generated/wrapper.h @@ -220,6 +220,7 @@ void iFiii(x64emu_t *emu, uintptr_t fnc); void iFiiu(x64emu_t *emu, uintptr_t fnc); void iFiip(x64emu_t *emu, uintptr_t fnc); void iFiuu(x64emu_t *emu, uintptr_t fnc); +void iFiLN(x64emu_t *emu, uintptr_t fnc); void iFipu(x64emu_t *emu, uintptr_t fnc); void iFipp(x64emu_t *emu, uintptr_t fnc); void iFuup(x64emu_t *emu, uintptr_t fnc); @@ -525,6 +526,7 @@ void vFppppp(x64emu_t *emu, uintptr_t fnc); void iFEippp(x64emu_t *emu, uintptr_t fnc); void iFEpipi(x64emu_t *emu, uintptr_t fnc); void iFEpipp(x64emu_t *emu, uintptr_t fnc); +void iFEpLpp(x64emu_t *emu, uintptr_t fnc); void iFEppiV(x64emu_t *emu, uintptr_t fnc); void iFEpppp(x64emu_t *emu, uintptr_t fnc); void iFiiupp(x64emu_t *emu, uintptr_t fnc); @@ -908,5 +910,6 @@ void pFppv(x64emu_t *emu, uintptr_t fnc); void iFEvpp(x64emu_t *emu, uintptr_t fnc); void iFEpvpp(x64emu_t *emu, uintptr_t fnc); void iFEpvpV(x64emu_t *emu, uintptr_t fnc); +void iFEpLvvpp(x64emu_t *emu, uintptr_t fnc); #endif //__WRAPPER_H_ diff --git a/src/wrapped/wrappedlibc.c b/src/wrapped/wrappedlibc.c index 50e354e9..0542d999 100755 --- a/src/wrapped/wrappedlibc.c +++ b/src/wrapped/wrappedlibc.c @@ -769,24 +769,16 @@ EXPORT int my___isoc99_sscanf(x64emu_t* emu, void* stream, void* fmt, void* b) return ((iFppp_t)f)(stream, fmt, VARARGS); } #endif - -EXPORT int my_vsnprintf(x64emu_t* emu, void* buff, uint32_t s, void * fmt, void * b, va_list V) { - #ifndef NOALIGN +#endif +EXPORT int my_vsnprintf(x64emu_t* emu, void* buff, size_t s, void * fmt, x64_va_list_t b) { // need to align on arm - myStackAlign((const char*)fmt, (uint32_t*)b, emu->scratch); - PREPARE_VALIST; - void* f = vsnprintf; - int r = ((iFpupp_t)f)(buff, s, fmt, VARARGS); - return r; - #else - void* f = vsnprintf; - int r = ((iFpupp_t)f)(buff, s, fmt, (uint32_t*)b); + CONVERT_VALIST(b); + int r = vsnprintf(buff, s, fmt, VARARGS); return r; - #endif } -EXPORT int my___vsnprintf(x64emu_t* emu, void* buff, uint32_t s, void * fmt, void * b, va_list V) __attribute__((alias("my_vsnprintf"))); -EXPORT int my___vsnprintf_chk(x64emu_t* emu, void* buff, uint32_t s, void * fmt, void * b, va_list V) __attribute__((alias("my_vsnprintf"))); - +EXPORT int my___vsnprintf(x64emu_t* emu, void* buff, size_t s, void * fmt, x64_va_list_t b) __attribute__((alias("my_vsnprintf"))); +EXPORT int my___vsnprintf_chk(x64emu_t* emu, void* buff, size_t s, void * fmt, x64_va_list_t b) __attribute__((alias("my_vsnprintf"))); +#if 0 EXPORT int my_vasprintf(x64emu_t* emu, void* strp, void* fmt, void* b, va_list V) { #ifndef NOALIGN diff --git a/src/wrapped/wrappedlibc_private.h b/src/wrapped/wrappedlibc_private.h index 995fd0f3..cfdc33d3 100755 --- a/src/wrapped/wrappedlibc_private.h +++ b/src/wrapped/wrappedlibc_private.h @@ -732,7 +732,7 @@ GOW(getrlimit64, iFip) //DATA(_IO_2_1_stdout_, //GO(_IO_adjust_column, //GO(_IO_adjust_wcolumn, -//GOW(ioctl, +GOW(ioctl, iFiLN) //GO(_IO_default_doallocate, //GO(_IO_default_finish, //GO(_IO_default_pbackfail, @@ -2052,9 +2052,9 @@ GOM(__vfprintf_chk, iFEpvpp) GOM(vprintf, iFEpp) GOM(__vprintf_chk, iFEvpp) //GOW(vscanf, -//GOW(__vsnprintf, -//GOW(vsnprintf, -//GO(__vsnprintf_chk, +GOM(__vsnprintf, iFEpLpp) // Weak +GOM(vsnprintf, iFEpLpp) // Weak +GOM(__vsnprintf_chk, iFEpLvvpp) //GOW(vsprintf, //GO(__vsprintf_chk, //GOW(__vsscanf, |