GDB - 看看有什么访问了 address/break 就可以了
GDB - see what have accessed the address/break on it
我正在尝试覆盖函数 vtable:
到此结束:
在 memcpy 之前
(gdb) x/100x 0xb7993150
0xb7993150: 0xb6eae130 0xb6eae130 0x41414141 0x41414141
0xb7993160: 0x41414141 0x41414141 0x41414141 0x41414141
0xb7993170: 0x00000000 0x00000000 0x00000030 0x00000023
0xb7993180: 0x6c707061 0x74616369 0x2f6e6f69 0x6574636f
0xb7993190: 0x74732d74 0x6d616572 0x00000000 0x0000001b
0xb79931a0: 0x00000001 0x00000001 0xb7993078 0x00000000
0xb79931b0: 0x00000000 0x0000002b 0xb6727688 0xb79931e0
0xb79931c0: 0x00000000 0xb6727678 0xb79931f8 0xb6727678
0xb79931d0: 0xb7993208 0x00000000 0x00000000 0x0000001b
0xb79931e0: 0x00000001 0x00000001 0xb79931b8 0x00000000
0xb79931f0: 0x66657463 0x00000013 0x00000000 0xb79932c8
0xb7993200: 0xb7993218 0x00000013 0x00000000 0xb79932d8
0xb7993210: 0xb79932d8 0x00000013 0xb666ee65 0xb79931f8
0xb7993220: 0xb7993228 0x00000013 0xb66b6971 0xb7993218
0xb7993230: 0xb7993238 0x00000013 0xb6693c11 0xb7993228
0xb7993240: 0xb7993248 0x00000013 0xb669ba79 0xb7993238
memcpy 之后
0xb7993150: 0x7d000000 0x67337874 0x41414141 0x41414141
0xb7993160: 0x41414141 0x41414141 0x41414141 0x41414141
0xb7993170: 0x99999999 0x42424242 0x42424242 0x42424242
0xb7993180: 0x42424242 0x42424242 0x42424242 0x42424242
0xb7993190: 0x42424242 0x42424242 0x42424242 0x42424242
0xb79931a0: 0x42424242 0x42424242 0x42424242 0x42424242
0xb79931b0: 0x42424242 0x42424242 0x42424242 0x46454443
0xb79931c0: 0x4a494847 0x0000204b 0xe8919cb3 0xb67276b6
0xb79931d0: 0xb7993208 0x00000000 0x00000000 0x0000001b
0xb79931e0: 0x00000001 0x00000001 0xb79931b8 0x00000000
0xb79931f0: 0x66657463 0x00000013 0x00000000 0xb79932c8
0xb7993200: 0xb7993218 0x00000013 0x00000000 0xb79932d8
0xb7993210: 0xb79932d8 0x00000013 0xb666ee65 0xb79931f8
0xb7993220: 0xb7993228 0x00000013 0xb66b6971 0xb7993218
0xb7993230: 0xb7993238 0x00000013 0xb6693c11 0xb7993228
0xb7993240: 0xb7993248 0x00000013 0xb669ba79 0xb7993238
0xb7993250: 0xb7993258 0x00000013 0xb666990d 0xb7993248
0xb7993260: 0xb7993268 0x00000013 0xb665ad61 0xb7993258
0xb7993270: 0xb7993278 0x00000013 0xb66c83b5 0xb7993268
0xb7993280: 0xb7993288 0x00000013 0xb666adad 0xb7993278
当 0x99999999 accessed/read 作为 vtable 指针时,我如何 stop/make 断点?
只会
b *0xb7993170
工作?
I am trying to overwrite the function vtable:
没有这样的事情。也许你的意思是 class vtable?
Will just b *0xb7993170
work?
没有。 b *0xb7993170
仅在 0xb7993170
包含可执行代码时才有效。如果它实际上包含一个 vtable(即 指向代码的指针),您将需要:
awatch *(int**)0xb7993170
或者您可以继续二进制文件,让它在尝试解除引用时崩溃 0x42424242
。
P.S。鉴于 0xb7993170
在 memcpy 之前包含 0
,它肯定 不是 函数指针(但仍可能是 vtable 的一部分)。
您需要在 实际 指针位置设置观察点(即 0xb7993170
不起作用,您需要 0xb7993178
或类似的东西) .
我正在尝试覆盖函数 vtable:
到此结束:
在 memcpy 之前
(gdb) x/100x 0xb7993150
0xb7993150: 0xb6eae130 0xb6eae130 0x41414141 0x41414141
0xb7993160: 0x41414141 0x41414141 0x41414141 0x41414141
0xb7993170: 0x00000000 0x00000000 0x00000030 0x00000023
0xb7993180: 0x6c707061 0x74616369 0x2f6e6f69 0x6574636f
0xb7993190: 0x74732d74 0x6d616572 0x00000000 0x0000001b
0xb79931a0: 0x00000001 0x00000001 0xb7993078 0x00000000
0xb79931b0: 0x00000000 0x0000002b 0xb6727688 0xb79931e0
0xb79931c0: 0x00000000 0xb6727678 0xb79931f8 0xb6727678
0xb79931d0: 0xb7993208 0x00000000 0x00000000 0x0000001b
0xb79931e0: 0x00000001 0x00000001 0xb79931b8 0x00000000
0xb79931f0: 0x66657463 0x00000013 0x00000000 0xb79932c8
0xb7993200: 0xb7993218 0x00000013 0x00000000 0xb79932d8
0xb7993210: 0xb79932d8 0x00000013 0xb666ee65 0xb79931f8
0xb7993220: 0xb7993228 0x00000013 0xb66b6971 0xb7993218
0xb7993230: 0xb7993238 0x00000013 0xb6693c11 0xb7993228
0xb7993240: 0xb7993248 0x00000013 0xb669ba79 0xb7993238
memcpy 之后
0xb7993150: 0x7d000000 0x67337874 0x41414141 0x41414141
0xb7993160: 0x41414141 0x41414141 0x41414141 0x41414141
0xb7993170: 0x99999999 0x42424242 0x42424242 0x42424242
0xb7993180: 0x42424242 0x42424242 0x42424242 0x42424242
0xb7993190: 0x42424242 0x42424242 0x42424242 0x42424242
0xb79931a0: 0x42424242 0x42424242 0x42424242 0x42424242
0xb79931b0: 0x42424242 0x42424242 0x42424242 0x46454443
0xb79931c0: 0x4a494847 0x0000204b 0xe8919cb3 0xb67276b6
0xb79931d0: 0xb7993208 0x00000000 0x00000000 0x0000001b
0xb79931e0: 0x00000001 0x00000001 0xb79931b8 0x00000000
0xb79931f0: 0x66657463 0x00000013 0x00000000 0xb79932c8
0xb7993200: 0xb7993218 0x00000013 0x00000000 0xb79932d8
0xb7993210: 0xb79932d8 0x00000013 0xb666ee65 0xb79931f8
0xb7993220: 0xb7993228 0x00000013 0xb66b6971 0xb7993218
0xb7993230: 0xb7993238 0x00000013 0xb6693c11 0xb7993228
0xb7993240: 0xb7993248 0x00000013 0xb669ba79 0xb7993238
0xb7993250: 0xb7993258 0x00000013 0xb666990d 0xb7993248
0xb7993260: 0xb7993268 0x00000013 0xb665ad61 0xb7993258
0xb7993270: 0xb7993278 0x00000013 0xb66c83b5 0xb7993268
0xb7993280: 0xb7993288 0x00000013 0xb666adad 0xb7993278
当 0x99999999 accessed/read 作为 vtable 指针时,我如何 stop/make 断点?
只会
b *0xb7993170
工作?
I am trying to overwrite the function vtable:
没有这样的事情。也许你的意思是 class vtable?
Will just
b *0xb7993170
work?
没有。 b *0xb7993170
仅在 0xb7993170
包含可执行代码时才有效。如果它实际上包含一个 vtable(即 指向代码的指针),您将需要:
awatch *(int**)0xb7993170
或者您可以继续二进制文件,让它在尝试解除引用时崩溃 0x42424242
。
P.S。鉴于 0xb7993170
在 memcpy 之前包含 0
,它肯定 不是 函数指针(但仍可能是 vtable 的一部分)。
您需要在 实际 指针位置设置观察点(即 0xb7993170
不起作用,您需要 0xb7993178
或类似的东西) .