2008-09-11 7 views
11

gdbのObjective-Cオブジェクトにメッセージを送信しようとしています。デバッグ中にオブジェクトにメッセージを送信するObjective-C(記号なし)

(gdb) p $esi 
$2 = (void *) 0x1268160 
(gdb) po $esi 
<NSArray: 0x1359c0> 
(gdb) po [$esi count] 
Target does not respond to this message selector. 

メッセージを送信できません。何か不足していますか?私は本当にシンボルなどが必要ですか?

+0

注:[reversing]タグはリバースエンジニアリングのトピックを記述するためのものではありません。代わりに[リバースエンジニアリング]を使用する – user1354557

答えて

10

、あなたはperformSelectorを使用することができます。

(gdb) print (int)[receivedData count] 
Target does not respond to this message selector. 

(gdb) print (int)[receivedData performSelector:@selector(count) ] 
2008-09-15 00:46:35.854 Executable[1008:20b] *** -[NSConcreteMutableData count]: 
unrecognized selector sent to instance 0x105f2e0 

を使用すると、引数の使用withObject渡す必要がある場合:

(gdb) print (int)[receivedData performSelector:@selector(count) withObject:myObject ] 
1

キャストする必要がありますか?$esi? [ジョン・Calsbeek]

@

p (NSUInteger)[(NSArray *)$esi count] 
0

そして、それが不足しているシンボルについて文句を言います。

(gdb) p (NSUInteger)[(NSObject*)$esi retainCount] 
No symbol table is loaded. Use the "file" command. 
(gdb) p [(NSArray *)$esi count] 
No symbol "NSArray" in current context. 

私は財団のためのシンボルをロードしようとした:

(gdb) add-symbol-file /System/Library/Frameworks/Foundation.framework/Foundation 
add symbol table from file "/System/Library/Frameworks/Foundation.framework/Foundation"? (y or n) y 
Reading symbols from /System/Library/Frameworks/Foundation.framework/Foundation...done. 

まだ運:

(gdb) p [(NSArray *)$esi count] 
No symbol "NSArray" in current context. 

をとにかく、私はこの問題を解決するキャストとは思いません、メッセージを送信できるようにするために、どのようなオブジェクトであるかを知る必要はありません。私は私が調査していた物...か何かに問題があったと思います

(gdb) p $eax 
$11 = 367589056 
(gdb) po $eax 
<NSCFArray 0x15e8f6c0>(
    file://localhost/Users/ask/Documents/composing-fractals.pdf 
) 

(gdb) p (int)[$eax retainCount] 
$12 = 1 

: 奇妙なことは、私は、私は何の問題へのメッセージ送信を持っていないNSCFArrayを見つけたことです。

ありがとうございました!あなたはGDBをオーバーライドして、それはあなたをさせませんオブジェクトにメッセージを送信する必要がある場合は

関連する問題