2017-03-28 12 views
-1

私は、関数のvtable上書きしようとしています:それが行われている。ここGDBは - それを破る/アドレスにアクセスしたかを見る

(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 
0xb:  0xb79932d8  0x00000013  0xb666ee65  0xb79931f8 
0xb7993220:  0xb7993228  0x00000013  0xb66b6971  0xb7993218 
0xb7993230:  0xb7993238  0x00000013  0xb6693c11  0xb7993228 
0xb7993240:  0xb7993248  0x00000013  0xb669ba79  0xb7993238 

のmemcpy

後の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 
0xb:  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がvtableポインタとしてアクセス/読み込まれるとブレークポイントを停止/作成できますか?

はちょうど

b *0xb7993170 

は動作しますか?

答えて

1

私は、関数のvtableを上書きしようとしています:

なものはありません。おそらくあなたはクラスvtableを意味するでしょうか?

ちょうどb *0xb7993170になりますか?

b *0xb7993170は、IF 0xb7993170には実行可能コードが含まれています。それは実際にvtableの(すなわちポインタコードに)が含まれている場合、あなたがしたいよ:

awatch *(int**)0xb7993170 

それともバイナリを継続し、それが間接参照0x42424242にしようとしたとき、それがクラッシュさせることができます。

P.S. memcpyの前にに0が含まれていたとすれば、それは確かにではなく、関数ポインタです(でもvtableの一部である可能性があります)。あなたは実際ポインタの位置にウォッチポイントを設定する必要が

(すなわち0xb7993170が動作しません、あなたは0xb7993178またはそのようなものが必要)。

+0

THANKS !!!非常に良い答え。あなたはvtablesに関する私の他の質問を見てみることができますか? https://security.stackexchange.com/questions/155226/vtable-finding-the-function-pointer –

関連する問題