2016-11-02 6 views
0

오늘 Xcode 8.1이 설치되었습니다. 여기에는 360.1.65 버전의 lldb가 포함됩니다. lldb를 사용하여 iOS 7.1.2에서 armv7 바이너리를 디버깅 할 때. 엄지 코드를 자동으로 재검색 할 수 없습니다. 이것은 disas 명령을 사용한 나의 결과입니다. lldb-360.1.65 (xcode8.1) 결과 오류가있는 disas 명령

(lldb) disas -s 0x709d8 -e 0x709e0 
networkd`_mh_execute_header: 
0x709d8 <+39384>: b  0xff3aca20 
0x709dc <+39388>: .long 0xf64c6940  ; unknown opcode  

내가 lldb-350.0.21.9 (엑스 코드 7.3.1)에서 동일한 코드를 테스트, 그것은 아무 문제가 없습니다.

(lldb) disas -s 0x479d8 -e 0x479e0 
networkd`___lldb_unnamed_function192$$networkd: 
0x479d8 <+352>: blx 0x57f74     ; symbol stub for:  xpc_data_get_bytes_ptr 
0x479dc <+356>: ldr r0, [r0, #0x14] 
0x479de <+358>: movw r0, #0xc800  

아무도 도와 줄 수 있습니까? 고맙습니다.

답변

0

코드가 팔인지 엄지인지에 대한 정보가 기호 테이블에서 전달되고 디버거가이를 읽습니다. 8.0 예제에서 함수에없는 코드를 디스 어셈블하는 것처럼 보이므로 (바이너리 헤더에 있음) 올바른 아키텍처를 찾을 수 없습니다. 7.1 예제는 우리가 인식하는 함수입니다 (이름은 제거되었지만 ...). 그래서 우리는 올바르게 이해합니다.

해결 방법으로 -A thumbdisassemble으로 전달하여 선택 사항을 강제로 적용 할 수 있습니다.

인식 된 기능에서 코드를 디스 어셈블 할 때도 이와 같이 표시되는 경우 http://bugreporter.apple.com이라는 버그를 신고해야합니다.

+0

내가 '분해'할 때 '엄지'를 사용할 때. 결과는 엄지 손가락 만입니다. 첫 번째 암 코드 (0x..9d8)를 처리 할 수 ​​없습니다. lldb에서 thumb & arm auto를 전환 할 수있는 방법이 있습니까? – LinuxPad

+0

아니요, lldb에는 "이 명령 스트림이 팔이 아닌 엄지 손가락처럼 보이기 시작합니다"유형의 휴리스틱이 없습니다. 그렇게 할 수는 있지만 ARM의 코드에는 데이터가있는 경우가 많기 때문에 항상 올바른 방법을 찾는 것이 까다로울 수 있습니다. 그것은 가치가있는 것보다 더 많은 문제가 될 가능성이 큽니다. 그리고 당신은 일반적으로 상징에서 알기 때문에 대부분의 시간은 필요하지 않습니다. –

+0

해체하려는 바이너리의 심볼을 더 이상 볼 수없는 이유를 알아내는 것은 흥미로울 것입니다. –