{"id":1266,"date":"2022-10-09T15:06:55","date_gmt":"2022-10-09T06:06:55","guid":{"rendered":"https:\/\/mowareblog.net\/3rd\/?p=1266"},"modified":"2022-10-10T01:03:53","modified_gmt":"2022-10-09T16:03:53","slug":"lldb-%e3%82%a2%e3%82%bb%e3%83%b3%e3%83%96%e3%83%aa%e8%a8%80%e8%aa%9e%e3%81%ae%e8%a1%8c%e3%81%abbreakpoint%e3%82%92%e8%a8%ad%e5%ae%9a%e3%81%99%e3%82%8b","status":"publish","type":"post","link":"https:\/\/mowareblog.net\/3rd\/2022\/10\/1266\/lldb-%e3%82%a2%e3%82%bb%e3%83%b3%e3%83%96%e3%83%aa%e8%a8%80%e8%aa%9e%e3%81%ae%e8%a1%8c%e3%81%abbreakpoint%e3%82%92%e8%a8%ad%e5%ae%9a%e3%81%99%e3%82%8b\/","title":{"rendered":"[LLDB] \u30a2\u30bb\u30f3\u30d6\u30ea\u8a00\u8a9e\u306e\u884c\u306bBreakpoint\u3092\u8a2d\u5b9a\u3059\u308b"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">[M1 Mac, Big Sur 11.6.8, clang 13.0.0, NO IDE]<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">C\u8a00\u8a9e\u30b3\u30fc\u30c9\u306e\u884c\u5358\u4f4d\u3067\u306f\u30ec\u30b8\u30b9\u30bf\u5024\u3084\u30e1\u30e2\u30ea\u5024\u306e\u8a73\u7d30\u304c\u8ffd\u3048\u306a\u3044\u306e\u3067\u3001\u30a2\u30bb\u30f3\u30d6\u30ea\u8a00\u8a9e\u306e\u884c\u5358\u4f4d\u3067\u8ffd\u8de1\u3059\u308b\u65b9\u6cd5\u3092\u6a21\u7d22\u3057\u307e\u3057\u305f\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">GDB\u306f\u4e0d\u53ef\u3001LLDB\u3067\u306f\u53ef\u80fd\u3067\u3057\u305f\u3002\u305f\u3060\u3057\u6700\u521d\u306brun\u30b3\u30de\u30f3\u30c9\u3067\u7a7a\u5b9f\u884c\u3055\u305b\u306a\u3044\u3068\u6709\u52b9\u306aBreakpoint\u304c\u8a2d\u5b9a\u3067\u304d\u307e\u305b\u3093\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">GDB\u304c\u4ed5\u69d8\u53ca\u3073\u9177\u3044\u30d0\u30b0\u3067Intel Mac\u3067\u3082\u307e\u3068\u3082\u306b\u4f7f\u3048\u306a\u3044\u72b6\u614b\u306b\u306a\u3063\u3066\u3044\u307e\u3059\u304c\u3001LLDB\u306e\u3053\u306e\u7a0b\u5ea6\u306e\u4e0d\u5177\u5408\u306a\u3089\u304b\u308f\u3044\u3044\u3082\u306e\u3067\u3059\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u3061\u306a\u307f\u306bGDB\u5c0e\u5165\u306b\u3064\u3044\u3066\u306fIntel Mac\u306bMacPorts\u3067\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3001ggdb\u30d5\u30a1\u30a4\u30eb\u306b\u30b3\u30fc\u30c9\u7f72\u540d\u3001SIP(System Integrity Protection)\u3092&#8211;without debug\u30aa\u30d7\u30b7\u30e7\u30f3\u3067\u9650\u5b9a\u7684\u306b\u89e3\u9664\u3057\u3066\u3082\u3001\u7d50\u5c40\u30d0\u30b0\u306b\u963b\u307e\u308c\u307e\u3057\u305f\u3002\u306a\u304aApple Silicon\u306b\u306f\u4eca\u306e\u3068\u3053\u308d\u30d3\u30eb\u30c9\u6e08\u307f\u30d5\u30a1\u30a4\u30eb\u306f\u63d0\u4f9b\u3055\u308c\u3066\u3044\u307e\u305b\u3093\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">GCC\u3001GDB\u5171\u306b\u30bd\u30fc\u30b9\u30b3\u30fc\u30c9\u304b\u3089\u306e\u30d3\u30eb\u30c9\u3082\u307e\u3068\u3082\u306b\u3067\u304d\u306a\u3044\u3067\u3059\u3057\u3001GNU\u306fMac\u3092\u8efd\u8996\u3057\u3066\u3044\u308b\u3088\u3046\u306b\u601d\u3044\u307e\u3059\u3002\u3060\u304b\u3089\u3053\u305dApple\u306fclang\u3084LLDB\u306e\u958b\u767a\u306b\u6ce8\u529b\u3057\u3066\u3044\u308b\u306e\u3067\u3057\u3087\u3046\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">LLDB\u3067\u306f\u306a\u3093\u3068\u304b\u3067\u304d\u305f\u3082\u306e\u306e\u3001next\u30b3\u30de\u30f3\u30c9\u3092\u4f7f\u3048\u305a\u30a2\u30bb\u30f3\u30d6\u30ea\u8a00\u8a9e\u30b3\u30fc\u30c9\u5404\u884c\u3092Breakpoint\u3068\u3057\u3066\u8a2d\u5b9a\u3059\u308b\u5fc5\u8981\u304c\u3042\u308b\u306e\u3067\u304b\u306a\u308a\u9762\u5012\u3067\u3059\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u3068\u308a\u3042\u3048\u305a\u30ed\u30b0\u3092\u8f09\u305b\u3066\u304a\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism undefined-numbers lang-bash\" data-file=\"LLDB\" data-lang=\"Bash\"><code>bin $ lldb test\n(lldb) target create &quot;test&quot;\nCurrent executable set to \/test&#39; (arm64).\n(lldb) disass -n main\ntest`main:\ntest[0x100003e48] &lt;+0&gt;:   sub    sp, sp, #0x60             ; =0x60 \ntest[0x100003e4c] &lt;+4&gt;:   stp    x29, x30, [sp, #0x50]\ntest[0x100003e50] &lt;+8&gt;:   mov    w8, #0x0\ntest[0x100003e54] &lt;+12&gt;:  str    w8, [sp, #0x2c]\ntest[0x100003e58] &lt;+16&gt;:  str    wzr, [sp, #0x4c]\ntest[0x100003e5c] &lt;+20&gt;:  mov    w8, #0x3e8\ntest[0x100003e60] &lt;+24&gt;:  str    w8, [sp, #0x48]\ntest[0x100003e64] &lt;+28&gt;:  adrp   x8, 0\ntest[0x100003e68] &lt;+32&gt;:  add    x8, x8, #0xf50            ; =0xf50 \ntest[0x100003e6c] &lt;+36&gt;:  ldr    w9, [x8]\ntest[0x100003e70] &lt;+40&gt;:  add    x10, sp, #0x40            ; =0x40 \ntest[0x100003e74] &lt;+44&gt;:  str    x10, [sp, #0x10]\ntest[0x100003e78] &lt;+48&gt;:  str    w9, [sp, #0x40]\ntest[0x100003e7c] &lt;+52&gt;:  ldrh   w8, [x8, #0x4]\ntest[0x100003e80] &lt;+56&gt;:  strh   w8, [sp, #0x44]\ntest[0x100003e84] &lt;+60&gt;:  add    x8, sp, #0x38             ; =0x38 \ntest[0x100003e88] &lt;+64&gt;:  str    x8, [sp, #0x18]\ntest[0x100003e8c] &lt;+68&gt;:  mov    x8, #0x797a\ntest[0x100003e90] &lt;+72&gt;:  movk   x8, #0x78, lsl #16\ntest[0x100003e94] &lt;+76&gt;:  str    x8, [sp, #0x38]\ntest[0x100003e98] &lt;+80&gt;:  add    x8, sp, #0x30             ; =0x30 \ntest[0x100003e9c] &lt;+84&gt;:  str    x8, [sp, #0x20]\ntest[0x100003ea0] &lt;+88&gt;:  adrp   x8, 0\ntest[0x100003ea4] &lt;+92&gt;:  add    x8, x8, #0xf56            ; =0xf56 \ntest[0x100003ea8] &lt;+96&gt;:  str    x8, [sp, #0x30]\ntest[0x100003eac] &lt;+100&gt;: ldr    w9, [sp, #0x48]\ntest[0x100003eb0] &lt;+104&gt;: mov    x8, x9\ntest[0x100003eb4] &lt;+108&gt;: adrp   x0, 0\ntest[0x100003eb8] &lt;+112&gt;: add    x0, x0, #0xf5a            ; =0xf5a \ntest[0x100003ebc] &lt;+116&gt;: mov    x9, sp\ntest[0x100003ec0] &lt;+120&gt;: str    x8, [x9]\ntest[0x100003ec4] &lt;+124&gt;: bl     0x100003f20               ; symbol stub for: printf\ntest[0x100003ec8] &lt;+128&gt;: ldr    x8, [sp, #0x10]\ntest[0x100003ecc] &lt;+132&gt;: adrp   x0, 0\ntest[0x100003ed0] &lt;+136&gt;: add    x0, x0, #0xf61            ; =0xf61 \ntest[0x100003ed4] &lt;+140&gt;: mov    x9, sp\ntest[0x100003ed8] &lt;+144&gt;: str    x8, [x9]\ntest[0x100003edc] &lt;+148&gt;: bl     0x100003f20               ; symbol stub for: printf\ntest[0x100003ee0] &lt;+152&gt;: ldr    x8, [sp, #0x18]\ntest[0x100003ee4] &lt;+156&gt;: adrp   x0, 0\ntest[0x100003ee8] &lt;+160&gt;: add    x0, x0, #0xf68            ; =0xf68 \ntest[0x100003eec] &lt;+164&gt;: mov    x9, sp\ntest[0x100003ef0] &lt;+168&gt;: str    x8, [x9]\ntest[0x100003ef4] &lt;+172&gt;: bl     0x100003f20               ; symbol stub for: printf\ntest[0x100003ef8] &lt;+176&gt;: ldr    x8, [sp, #0x20]\ntest[0x100003efc] &lt;+180&gt;: adrp   x0, 0\ntest[0x100003f00] &lt;+184&gt;: add    x0, x0, #0xf73            ; =0xf73 \ntest[0x100003f04] &lt;+188&gt;: mov    x9, sp\ntest[0x100003f08] &lt;+192&gt;: str    x8, [x9]\ntest[0x100003f0c] &lt;+196&gt;: bl     0x100003f20               ; symbol stub for: printf\ntest[0x100003f10] &lt;+200&gt;: ldr    w0, [sp, #0x2c]\ntest[0x100003f14] &lt;+204&gt;: ldp    x29, x30, [sp, #0x50]\ntest[0x100003f18] &lt;+208&gt;: add    sp, sp, #0x60             ; =0x60 \ntest[0x100003f1c] &lt;+212&gt;: ret    \n(lldb) run\nProcess 21720 launched: &#39;\/test&#39; (arm64)\ni: 1000\nc: abcde\nc_ptr: zyx\nc_ptr2: V?\nProcess 21720 exited with status = 0 (0x00000000) \n(lldb) disass -n main\ntest`main:\n0x100003e48 &lt;+0&gt;:   sub    sp, sp, #0x60             ; =0x60 \n0x100003e4c &lt;+4&gt;:   stp    x29, x30, [sp, #0x50]\n0x100003e50 &lt;+8&gt;:   mov    w8, #0x0\n0x100003e54 &lt;+12&gt;:  str    w8, [sp, #0x2c]\n0x100003e58 &lt;+16&gt;:  str    wzr, [sp, #0x4c]\n0x100003e5c &lt;+20&gt;:  mov    w8, #0x3e8\n0x100003e60 &lt;+24&gt;:  str    w8, [sp, #0x48]\n0x100003e64 &lt;+28&gt;:  adrp   x8, 0\n0x100003e68 &lt;+32&gt;:  add    x8, x8, #0xf50            ; =0xf50 \n0x100003e6c &lt;+36&gt;:  ldr    w9, [x8]\n0x100003e70 &lt;+40&gt;:  add    x10, sp, #0x40            ; =0x40 \n0x100003e74 &lt;+44&gt;:  str    x10, [sp, #0x10]\n0x100003e78 &lt;+48&gt;:  str    w9, [sp, #0x40]\n0x100003e7c &lt;+52&gt;:  ldrh   w8, [x8, #0x4]\n0x100003e80 &lt;+56&gt;:  strh   w8, [sp, #0x44]\n0x100003e84 &lt;+60&gt;:  add    x8, sp, #0x38             ; =0x38 \n0x100003e88 &lt;+64&gt;:  str    x8, [sp, #0x18]\n0x100003e8c &lt;+68&gt;:  mov    x8, #0x797a\n0x100003e90 &lt;+72&gt;:  movk   x8, #0x78, lsl #16\n0x100003e94 &lt;+76&gt;:  str    x8, [sp, #0x38]\n0x100003e98 &lt;+80&gt;:  add    x8, sp, #0x30             ; =0x30 \n0x100003e9c &lt;+84&gt;:  str    x8, [sp, #0x20]\n0x100003ea0 &lt;+88&gt;:  adrp   x8, 0\n0x100003ea4 &lt;+92&gt;:  add    x8, x8, #0xf56            ; =0xf56 \n0x100003ea8 &lt;+96&gt;:  str    x8, [sp, #0x30]\n0x100003eac &lt;+100&gt;: ldr    w9, [sp, #0x48]\n0x100003eb0 &lt;+104&gt;: mov    x8, x9\n0x100003eb4 &lt;+108&gt;: adrp   x0, 0\n0x100003eb8 &lt;+112&gt;: add    x0, x0, #0xf5a            ; =0xf5a \n0x100003ebc &lt;+116&gt;: mov    x9, sp\n0x100003ec0 &lt;+120&gt;: str    x8, [x9]\n0x100003ec4 &lt;+124&gt;: bl     0x100003f20               ; symbol stub for: printf\n0x100003ec8 &lt;+128&gt;: ldr    x8, [sp, #0x10]\n0x100003ecc &lt;+132&gt;: adrp   x0, 0\n0x100003ed0 &lt;+136&gt;: add    x0, x0, #0xf61            ; =0xf61 \n0x100003ed4 &lt;+140&gt;: mov    x9, sp\n0x100003ed8 &lt;+144&gt;: str    x8, [x9]\n0x100003edc &lt;+148&gt;: bl     0x100003f20               ; symbol stub for: printf\n0x100003ee0 &lt;+152&gt;: ldr    x8, [sp, #0x18]\n0x100003ee4 &lt;+156&gt;: adrp   x0, 0\n0x100003ee8 &lt;+160&gt;: add    x0, x0, #0xf68            ; =0xf68 \n0x100003eec &lt;+164&gt;: mov    x9, sp\n0x100003ef0 &lt;+168&gt;: str    x8, [x9]\n0x100003ef4 &lt;+172&gt;: bl     0x100003f20               ; symbol stub for: printf\n0x100003ef8 &lt;+176&gt;: ldr    x8, [sp, #0x20]\n0x100003efc &lt;+180&gt;: adrp   x0, 0\n0x100003f00 &lt;+184&gt;: add    x0, x0, #0xf73            ; =0xf73 \n0x100003f04 &lt;+188&gt;: mov    x9, sp\n0x100003f08 &lt;+192&gt;: str    x8, [x9]\n0x100003f0c &lt;+196&gt;: bl     0x100003f20               ; symbol stub for: printf\n0x100003f10 &lt;+200&gt;: ldr    w0, [sp, #0x2c]\n0x100003f14 &lt;+204&gt;: ldp    x29, x30, [sp, #0x50]\n0x100003f18 &lt;+208&gt;: add    sp, sp, #0x60             ; =0x60 \n0x100003f1c &lt;+212&gt;: ret    \n(lldb) b 0x100003e48\nBreakpoint 1: where = test`main at test.c:3, address = 0x0000000100003e48\n(lldb) b 0x100003e4c\nBreakpoint 2: where = test`main + 4 at test.c:3, address = 0x0000000100003e4c\n(lldb) b 0x100003e50\nBreakpoint 3: where = test`main + 8 at test.c:3, address = 0x0000000100003e50\n(lldb) r\nProcess 22004 launched: &#39;\/test&#39; (arm64)\nProcess 22004 stopped\n* thread #1, queue = &#39;com.apple.main-thread&#39;, stop reason = breakpoint 1.1\n    frame #0: 0x0000000100003e48 test`main at test.c:3\n   1   \t#include &lt;stdio.h&gt;\n   2   \t\n-&gt; 3   \tint main() {\n   4   \t    int i = 1000;\n   5   \t    char c[6] = {&#39;a&#39;, &#39;b&#39;, &#39;c&#39;, &#39;d&#39;, &#39;e&#39;};\n   6   \t    char* c_ptr = &#39;xyz&#39;;\n   7   \t    char* c_ptr2 = &quot;stu&quot;;\nTarget 0: (test) stopped.\n(lldb) next\nProcess 22004 stopped\n* thread #1, queue = &#39;com.apple.main-thread&#39;, stop reason = breakpoint 2.1\n    frame #0: 0x0000000100003e4c test`main at test.c:3\n   1   \t#include &lt;stdio.h&gt;\n   2   \t\n-&gt; 3   \tint main() {\n   4   \t    int i = 1000;\n   5   \t    char c[6] = {&#39;a&#39;, &#39;b&#39;, &#39;c&#39;, &#39;d&#39;, &#39;e&#39;};\n   6   \t    char* c_ptr = &#39;xyz&#39;;\n   7   \t    char* c_ptr2 = &quot;stu&quot;;\nTarget 0: (test) stopped.<\/code><\/pre><\/div>\n","protected":false},"excerpt":{"rendered":"<p>[M1 Mac, Big Sur 11.6.8, clang 13.0.0, NO IDE] C\u8a00\u8a9e\u30b3\u30fc\u30c9\u306e\u884c\u5358\u4f4d\u3067\u306f\u30ec\u30b8\u30b9\u30bf\u5024\u3084\u30e1\u30e2\u30ea\u5024\u306e\u8a73\u7d30\u304c\u8ffd\u3048\u306a\u3044\u306e\u3067\u3001\u30a2\u30bb\u30f3\u30d6\u30ea\u8a00\u8a9e\u306e\u884c\u5358\u4f4d\u3067\u8ffd\u8de1\u3059\u308b\u65b9\u6cd5\u3092\u6a21\u7d22\u3057\u307e\u3057\u305f\u3002 GDB &hellip; <a href=\"https:\/\/mowareblog.net\/3rd\/2022\/10\/1266\/lldb-%e3%82%a2%e3%82%bb%e3%83%b3%e3%83%96%e3%83%aa%e8%a8%80%e8%aa%9e%e3%81%ae%e8%a1%8c%e3%81%abbreakpoint%e3%82%92%e8%a8%ad%e5%ae%9a%e3%81%99%e3%82%8b\/\" class=\"more-link\">\u7d9a\u304d\u3092\u8aad\u3080 <span class=\"screen-reader-text\">[LLDB] \u30a2\u30bb\u30f3\u30d6\u30ea\u8a00\u8a9e\u306e\u884c\u306bBreakpoint\u3092\u8a2d\u5b9a\u3059\u308b<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_themeisle_gutenberg_block_has_review":false,"footnotes":""},"categories":[14],"tags":[],"class_list":["post-1266","post","type-post","status-publish","format-standard","hentry","category-14"],"_links":{"self":[{"href":"https:\/\/mowareblog.net\/3rd\/wp-json\/wp\/v2\/posts\/1266","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/mowareblog.net\/3rd\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/mowareblog.net\/3rd\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/mowareblog.net\/3rd\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/mowareblog.net\/3rd\/wp-json\/wp\/v2\/comments?post=1266"}],"version-history":[{"count":15,"href":"https:\/\/mowareblog.net\/3rd\/wp-json\/wp\/v2\/posts\/1266\/revisions"}],"predecessor-version":[{"id":1286,"href":"https:\/\/mowareblog.net\/3rd\/wp-json\/wp\/v2\/posts\/1266\/revisions\/1286"}],"wp:attachment":[{"href":"https:\/\/mowareblog.net\/3rd\/wp-json\/wp\/v2\/media?parent=1266"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/mowareblog.net\/3rd\/wp-json\/wp\/v2\/categories?post=1266"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/mowareblog.net\/3rd\/wp-json\/wp\/v2\/tags?post=1266"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}