diff options
| author | ptitSeb <sebastien.chev@gmail.com> | 2022-06-11 10:29:46 +0200 |
|---|---|---|
| committer | ptitSeb <sebastien.chev@gmail.com> | 2022-06-11 10:29:46 +0200 |
| commit | 72927195fdea77040513c284a91809b00a0cadd9 (patch) | |
| tree | 8a0cc5d8cdbb1fb944c73db1f9c15d9c20b27799 /src/wrapped | |
| parent | e29326d8d048b459b58272a0f88a776852dfe519 (diff) | |
| download | box64-72927195fdea77040513c284a91809b00a0cadd9.tar.gz box64-72927195fdea77040513c284a91809b00a0cadd9.zip | |
Added wrapped __wprintf_chk and wprintf (for #311)
Diffstat (limited to 'src/wrapped')
| -rw-r--r-- | src/wrapped/generated/functions_list.txt | 4 | ||||
| -rw-r--r-- | src/wrapped/generated/wrappedlibctypes.h | 3 | ||||
| -rw-r--r-- | src/wrapped/generated/wrapper.c | 2 | ||||
| -rw-r--r-- | src/wrapped/generated/wrapper.h | 1 | ||||
| -rwxr-xr-x | src/wrapped/wrappedlibc.c | 12 | ||||
| -rwxr-xr-x | src/wrapped/wrappedlibc_private.h | 4 |
6 files changed, 24 insertions, 2 deletions
diff --git a/src/wrapped/generated/functions_list.txt b/src/wrapped/generated/functions_list.txt index 1b90b33d..323b9fc7 100644 --- a/src/wrapped/generated/functions_list.txt +++ b/src/wrapped/generated/functions_list.txt @@ -829,6 +829,7 @@ #() UFppip #() UFpppp #() dFpppp +#() lFEipV #() lFEpip #() lFEppL #() lFEppp @@ -2723,6 +2724,7 @@ wrappedlibc: - execl - execlp - printf + - wprintf - iFpA: - vprintf - iFSp: @@ -2802,6 +2804,8 @@ wrappedlibc: - __open - open - open64 +- lFipV: + - __wprintf_chk - lFppL: - readlink - pFpip: diff --git a/src/wrapped/generated/wrappedlibctypes.h b/src/wrapped/generated/wrappedlibctypes.h index 77974f8b..58d9dad6 100644 --- a/src/wrapped/generated/wrappedlibctypes.h +++ b/src/wrapped/generated/wrappedlibctypes.h @@ -48,6 +48,7 @@ typedef int64_t (*iFppp_t)(void*, void*, void*); typedef int64_t (*iFppV_t)(void*, void*, ...); typedef int64_t (*iFppA_t)(void*, void*, va_list); typedef int64_t (*iFpOu_t)(void*, int32_t, uint64_t); +typedef intptr_t (*lFipV_t)(int64_t, void*, ...); typedef intptr_t (*lFppL_t)(void*, void*, uintptr_t); typedef void* (*pFpip_t)(void*, int64_t, void*); typedef void* (*pFppp_t)(void*, void*, void*); @@ -128,6 +129,7 @@ typedef int64_t (*iFppipppp_t)(void*, void*, int64_t, void*, void*, void*, void* GO(execl, iFpV_t) \ GO(execlp, iFpV_t) \ GO(printf, iFpV_t) \ + GO(wprintf, iFpV_t) \ GO(vprintf, iFpA_t) \ GO(_IO_file_stat, iFSp_t) \ GO(__sysv_signal, pFip_t) \ @@ -188,6 +190,7 @@ typedef int64_t (*iFppipppp_t)(void*, void*, int64_t, void*, void*, void*, void* GO(__open, iFpOu_t) \ GO(open, iFpOu_t) \ GO(open64, iFpOu_t) \ + GO(__wprintf_chk, lFipV_t) \ GO(readlink, lFppL_t) \ GO(fts_open, pFpip_t) \ GO(tsearch, pFppp_t) \ diff --git a/src/wrapped/generated/wrapper.c b/src/wrapped/generated/wrapper.c index 81b81aa9..91192024 100644 --- a/src/wrapped/generated/wrapper.c +++ b/src/wrapped/generated/wrapper.c @@ -863,6 +863,7 @@ typedef uint64_t (*UFppii_t)(void*, void*, int64_t, int64_t); typedef uint64_t (*UFppip_t)(void*, void*, int64_t, void*); typedef uint64_t (*UFpppp_t)(void*, void*, void*, void*); typedef double (*dFpppp_t)(void*, void*, void*, void*); +typedef intptr_t (*lFEipV_t)(x64emu_t*, int64_t, void*, void*); typedef intptr_t (*lFEpip_t)(x64emu_t*, void*, int64_t, void*); typedef intptr_t (*lFEppL_t)(x64emu_t*, void*, void*, uintptr_t); typedef intptr_t (*lFEppp_t)(x64emu_t*, void*, void*, void*); @@ -2953,6 +2954,7 @@ void UFppii(x64emu_t *emu, uintptr_t fcn) { UFppii_t fn = (UFppii_t)fcn; R_RAX=f void UFppip(x64emu_t *emu, uintptr_t fcn) { UFppip_t fn = (UFppip_t)fcn; R_RAX=fn((void*)R_RDI, (void*)R_RSI, (int64_t)R_RDX, (void*)R_RCX); } void UFpppp(x64emu_t *emu, uintptr_t fcn) { UFpppp_t fn = (UFpppp_t)fcn; R_RAX=fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX); } void dFpppp(x64emu_t *emu, uintptr_t fcn) { dFpppp_t fn = (dFpppp_t)fcn; emu->xmm[0].d[0]=fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX); } +void lFEipV(x64emu_t *emu, uintptr_t fcn) { lFEipV_t fn = (lFEipV_t)fcn; R_RAX=(intptr_t)fn(emu, (int64_t)R_RDI, (void*)R_RSI, (void*)(R_RSP + 8)); } void lFEpip(x64emu_t *emu, uintptr_t fcn) { lFEpip_t fn = (lFEpip_t)fcn; R_RAX=(intptr_t)fn(emu, (void*)R_RDI, (int64_t)R_RSI, (void*)R_RDX); } void lFEppL(x64emu_t *emu, uintptr_t fcn) { lFEppL_t fn = (lFEppL_t)fcn; R_RAX=(intptr_t)fn(emu, (void*)R_RDI, (void*)R_RSI, (uintptr_t)R_RDX); } void lFEppp(x64emu_t *emu, uintptr_t fcn) { lFEppp_t fn = (lFEppp_t)fcn; R_RAX=(intptr_t)fn(emu, (void*)R_RDI, (void*)R_RSI, (void*)R_RDX); } diff --git a/src/wrapped/generated/wrapper.h b/src/wrapped/generated/wrapper.h index f4c08cb0..97bd685a 100644 --- a/src/wrapped/generated/wrapper.h +++ b/src/wrapped/generated/wrapper.h @@ -862,6 +862,7 @@ void UFppii(x64emu_t *emu, uintptr_t fnc); void UFppip(x64emu_t *emu, uintptr_t fnc); void UFpppp(x64emu_t *emu, uintptr_t fnc); void dFpppp(x64emu_t *emu, uintptr_t fnc); +void lFEipV(x64emu_t *emu, uintptr_t fnc); void lFEpip(x64emu_t *emu, uintptr_t fnc); void lFEppL(x64emu_t *emu, uintptr_t fnc); void lFEppp(x64emu_t *emu, uintptr_t fnc); diff --git a/src/wrapped/wrappedlibc.c b/src/wrapped/wrappedlibc.c index f066b917..ae0c954f 100755 --- a/src/wrapped/wrappedlibc.c +++ b/src/wrapped/wrappedlibc.c @@ -557,6 +557,18 @@ EXPORT int my___printf_chk(x64emu_t *emu, int chk, void* fmt, void* b) PREPARE_VALIST; return vprintf((const char*)fmt, VARARGS); } +EXPORT int my_wprintf(x64emu_t *emu, void* fmt, void* b) { + myStackAlignW(emu, (const char*)fmt, b, emu->scratch, R_EAX, 1); + PREPARE_VALIST; + return vwprintf((const wchar_t*)fmt, VARARGS); +} +EXPORT int my___wprintf_chk(x64emu_t *emu, int chk, void* fmt, void* b) +{ + (void)chk; + myStackAlignW(emu, (const char*)fmt, b, emu->scratch, R_EAX, 2); + PREPARE_VALIST; + return vwprintf((const wchar_t*)fmt, VARARGS); +} EXPORT int my_vprintf(x64emu_t *emu, void* fmt, x64_va_list_t b) { (void)emu; diff --git a/src/wrapped/wrappedlibc_private.h b/src/wrapped/wrappedlibc_private.h index a131ae6b..9d8ac439 100755 --- a/src/wrapped/wrappedlibc_private.h +++ b/src/wrapped/wrappedlibc_private.h @@ -2204,8 +2204,8 @@ GO(wmemset, pFpiL) GO(wordexp, iFppi) GO(wordfree, vFp) //GO(__woverflow, -//GO(wprintf, iFpV) -//GO(__wprintf_chk, +GOM(wprintf, iFEpV) +GOM(__wprintf_chk, lFEipV) GOW(__write, lFipL) GOW(write, lFipL) //GO(__write_nocancel, |