[PATCH 2/3 v2] ntdll: Leave some space around DbgBreakPoint and DbgUserBreakPoint.

Rémi Bernon rbernon at codeweavers.com
Tue Jun 23 06:44:26 CDT 2020


CoD: Black Ops 3 and CoD: WWII modify these (and several others) and
expect to have enough space for a few instructions.

It then verifies later that the patches are still in place, and
terminates if the byte sequence do not match. Having small symbols can
make the patches to overlap and the check to fail.

Signed-off-by: Rémi Bernon <rbernon at codeweavers.com>
---

v2: Use .skip instead of .nops which doesn't work with old binutils,
also fix the size on x86_64.

 dlls/ntdll/signal_arm64.c  | 4 ++--
 dlls/ntdll/signal_i386.c   | 4 ++--
 dlls/ntdll/signal_x86_64.c | 4 ++--
 3 files changed, 6 insertions(+), 6 deletions(-)

diff --git a/dlls/ntdll/signal_arm64.c b/dlls/ntdll/signal_arm64.c
index 0159888f7ab..52d3d3f76ea 100644
--- a/dlls/ntdll/signal_arm64.c
+++ b/dlls/ntdll/signal_arm64.c
@@ -1358,12 +1358,12 @@ USHORT WINAPI RtlCaptureStackBackTrace( ULONG skip, ULONG count, PVOID *buffer,
 /**********************************************************************
  *              DbgBreakPoint   (NTDLL.@)
  */
-__ASM_STDCALL_FUNC( DbgBreakPoint, 0, "brk #0; ret")
+__ASM_STDCALL_FUNC( DbgBreakPoint, 0, "brk #0; ret\n\t.skip 16")
 
 /**********************************************************************
  *              DbgUserBreakPoint   (NTDLL.@)
  */
-__ASM_STDCALL_FUNC( DbgUserBreakPoint, 0, "brk #0; ret")
+__ASM_STDCALL_FUNC( DbgUserBreakPoint, 0, "brk #0; ret\n\t.skip 16")
 
 /**********************************************************************
  *           NtCurrentTeb   (NTDLL.@)
diff --git a/dlls/ntdll/signal_i386.c b/dlls/ntdll/signal_i386.c
index 21cc1b3ead4..abae17c0143 100644
--- a/dlls/ntdll/signal_i386.c
+++ b/dlls/ntdll/signal_i386.c
@@ -565,12 +565,12 @@ USHORT WINAPI RtlCaptureStackBackTrace( ULONG skip, ULONG count, PVOID *buffer,
 /**********************************************************************
  *		DbgBreakPoint   (NTDLL.@)
  */
-__ASM_STDCALL_FUNC( DbgBreakPoint, 0, "int $3; ret")
+__ASM_STDCALL_FUNC( DbgBreakPoint, 0, "int $3; ret\n\t.skip 16")
 
 /**********************************************************************
  *		DbgUserBreakPoint   (NTDLL.@)
  */
-__ASM_STDCALL_FUNC( DbgUserBreakPoint, 0, "int $3; ret")
+__ASM_STDCALL_FUNC( DbgUserBreakPoint, 0, "int $3; ret\n\t.skip 16")
 
 /**********************************************************************
  *           NtCurrentTeb   (NTDLL.@)
diff --git a/dlls/ntdll/signal_x86_64.c b/dlls/ntdll/signal_x86_64.c
index 52f7b73f8bf..ad2c010febc 100644
--- a/dlls/ntdll/signal_x86_64.c
+++ b/dlls/ntdll/signal_x86_64.c
@@ -2751,11 +2751,11 @@ USHORT WINAPI RtlCaptureStackBackTrace( ULONG skip, ULONG count, PVOID *buffer,
 /**********************************************************************
  *		DbgBreakPoint   (NTDLL.@)
  */
-__ASM_STDCALL_FUNC( DbgBreakPoint, 0, "int $3; ret")
+__ASM_STDCALL_FUNC( DbgBreakPoint, 0, "int $3; ret\n\t.skip 16")
 
 /**********************************************************************
  *		DbgUserBreakPoint   (NTDLL.@)
  */
-__ASM_STDCALL_FUNC( DbgUserBreakPoint, 0, "int $3; ret")
+__ASM_STDCALL_FUNC( DbgUserBreakPoint, 0, "int $3; ret\n\t.skip 16")
 
 #endif  /* __x86_64__ */
-- 
2.27.0




More information about the wine-devel mailing list