मैं अपने मैक पर सिएरा 10.12.4 के साथ x64 असेंबली लिखने और डीबग करने में सक्षम होना चाहता हूं। कोई सोचता है कि यह विशेष रूप से कठिन या अस्पष्ट इच्छा नहीं होगी, लेकिन कई घंटों के प्रयासों के बावजूद और ऑनलाइन खोज करने के बावजूद मैं सफल नहीं हुआ हूं और मुझे कोई और नहीं मिला है।मैक ओएस पर x64 असेंबली डीबग करना संभव है?
मैं NASM असेंबलर का उपयोग करना पसंद करूंगा, लेकिन अगर मुझे करना है तो जीएएस या इंटेल सिंटैक्स के साथ कुछ भी उपयोग करेगा। (वैसे, ध्यान दें कि सी फाइलों के साथ दोनों gdb और lldb काम ठीक जीसीसी के साथ संकलित।)
यहाँ मेरी स्थिति है और क्या मैं कोशिश की है:
एनएएसएम
काम नहीं करता है मैं एक फ़ाइल को इकट्ठा और लिंक कर सकता हूं और इसे सत्यापित करता हूं।
$ nasm -f macho64 -g -F dwarf hello2.s -o hello2.o
$ gcc hello2.o -o hello2
$ ./hello2
Hello, world!
लेकिन मैं इसे gdb (ध्यान दें कि मैं सभी आवश्यक codesigning बकवास क्या किया) के साथ डिबग नहीं कर सकते हैं:
$ gdb hello2
GNU gdb (GDB) 8.0
<snip>
Reading symbols from hello2...done.
(gdb) list
1 section .data
2
3 msg: db "Hello, world!", 0
4
5 section .text
6 global _main
7 extern _puts
8
9 _main:
10 push rbp
(gdb) break 10
Breakpoint 1 at 0x0: file hello2.s, line 10.
(gdb) run
Starting program: /Users/mike/GoogleDrive/Projects/Sort/hello2
[New Thread 0x1403 of process 38022]
warning: unhandled dyld version (15)
Warning:
Cannot insert breakpoint 1.
Cannot access memory at address 0x0
Command aborted.
और मैं यह lldb साथ डिबग नहीं कर सकते हैं:
$ lldb hello2
(lldb) target create "hello2"
Current executable set to 'hello2' (x86_64).
(lldb) b hello2.s:10
Breakpoint 1: no locations (pending).
WARNING: Unable to resolve breakpoint to any actual locations.
गैस काम नहीं करता है
मैं, इकट्ठा कर सकते हैं लिंक, और चलाएँ:
$ gcc -g hello.s -o hello
$ ./hello
Hello, world!
लेकिन मैं gdb के साथ डिबग नहीं कर सकते हैं:
$ gdb hello
GNU gdb (GDB) 8.0
<snip>
Reading symbols from hello...Reading symbols from /Users/mike/GoogleDrive/Projects/Sort/hello.dSYM/Contents/Resources/DWARF/hello...done.
done.
(gdb) list
1 .intel_syntax
2 .text
3 .globl _main
4
5 _main:
6 push rbp
7 mov rbp, rsp
8 lea rdi, [rip + _main.S_0]
9 call _puts
10 mov rax, 0
(gdb) break 6
No line 6 in the current file.
Make breakpoint pending on future shared library load? (y or [n]) y
Breakpoint 1 (6) pending.
(gdb) run
Starting program: /Users/mike/GoogleDrive/Projects/Sort/hello
[New Thread 0x1403 of process 38063]
warning: unhandled dyld version (15)
Hello, world!
[Inferior 1 (process 38063) exited normally]
(। तो यह सिर्फ भाग गया और ब्रेकप्वाइंट पर ध्यान नहीं दिया)
और मैं यह lldb साथ डिबग नहीं कर सकते हैं:
$ lldb hello
(lldb) target create "hello"
Current executable set to 'hello' (x86_64).
(lldb) b hello.s:6
Breakpoint 1: no locations (pending).
WARNING: Unable to resolve breakpoint to any actual locations.
जो चीजें मुझे ऑनलाइन मिली हैं
Here मैक ओएस के नए संस्करणों पर काम नहीं कर रहे gdb
पर एक ब्लॉग पोस्ट है।
कुछ पुराने संबंधित स्टैक ओवरफ्लो प्रश्न हैं, जिनमें से कोई भी पर्याप्त उत्तर प्रदान नहीं करता है।
this way to use Xcode भी है, जो चमत्कारी रूप से काम करता प्रतीत होता है ... लेकिन वास्तव में यह वही नहीं करता जो मैं चाहता हूं। डीबगर वास्तव में मेरी स्रोत फ़ाइल के बारे में पता नहीं है; यह सिर्फ निर्देशों के माध्यम से कदम उठा रहा है और अलग कोड या कुछ प्रदर्शित कर रहा है। इसके अलावा मैं एक्सकोड का उपयोग नहीं करना चाहता।
मैंने कुछ महीने पहले NASM मेलिंग सूची पर इसके बारे में पूछा और किसी ने कभी जवाब नहीं दिया।
तो ...
तो यह वर्तमान में सबसे बुनियादी बातें एक व्यक्ति एक कंप्यूटर Mac का उपयोग करके के साथ क्या करना चाहते हो सकता है की एक करने के लिए असंभव है?
अगर किसी के पास ऐसा करने का कोई तरीका है, तो कृपया मुझे बिल्कुल आवश्यक आदेश दिखाएं। चमत्कार की
'nasm' का कौन सा संस्करण? 'Gdb' का क्या संस्करण, 'llvm'? –
मैंने nasm संस्करण 2.13.01 और 2.14rc0, और gdb संस्करण 7.12.1 और 8.0 का प्रयास किया है। lldb-370.0.42। ऐप्पल llvm संस्करण 8.1.0। मुझे संस्करण के बावजूद एक ही परिणाम मिलते हैं। क्या आप इस सॉफ्टवेयर के कुछ संस्करणों के साथ काम करने के लिए डिबगिंग प्राप्त कर रहे हैं? –
मैं नस्ल 2.13 रिलीज नोट का जिक्र कर रहा हूं: "माचो ऑब्जेक्ट प्रारूप अब नए टूलचेन द्वारा आवश्यक बौने डीबगिंग प्रारूप का समर्थन करता है।" लेकिन आपने संकेत दिया है कि आप नवीनतम पर हैं। क्या आपने नासम मंच पर पूछा था? –