2008-09-11 2 views
11

Я пытаюсь отправить сообщения объектам Objective-C в gdb.Отправка сообщений объектам во время отладки Objective-C в gdb без символов

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

Я не могу отправить ему какое-либо сообщение. Я что-то упускаю? Мне действительно нужны символы или что-то еще?

+0

Примечание. Тег [reverseing] не предназначен для описания обратных инженерных тем; вместо этого использовать [обратное проектирование] – user1354557 2016-06-22 15:59:02

ответ

10

Если необходимо переопределить GDB и отправить сообщение на объект, когда он не подведет вас, вы можете использовать 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?

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

@ [Джон Calsbeek]

Затем он жалуется на недостающие символы.

(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. 

Во всяком случае, я не думаю, что литье является решением этой проблемы, вам не нужно знать, какой именно объект он хочет, чтобы отправлять сообщения на него. Странная вещь, что я нашел NSCFArray у меня нет никаких проблем с отправкой сообщений:

(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 

так что я думаю, что была проблема с объектом я расследовал ... или что-то.

Благодарим за помощь!

Смежные вопросы