macOS Sierra GDB не має коду


3

Спершу слід зазначити, що я використовую macOS Sierra (версія 10.12 бета-версія 16A238m), але я не думаю, що в цій певній ситуації він відрізняється від El Capitan (але, мабуть, ви знаєте більше, ніж я про це, або я б не хотів я зараз тут не ставлю це питання).

Тому я встановив GDB (The GNU Debugger) для перегляду серед книги, яку я зараз читаю ("Злом: Мистецтво експлуатації"), яка пояснює лише, як використовувати GDB, тому я не можу використовувати LLDB. Я встановив його за допомогою Homebrew ( brew install gdb), і все працювало чудово. Поки я не користувався ним. Я скомпілював свій вихідний код C за допомогою clang -g hello_word.c -o hello_world(це просто проста програма "Привіт, світ!"), А потім запускаю gdb -q hello_world, і ось сеанс:

Chens-MacBook-Pro:C chenjian$ gdb -q hello_world
Reading symbols from hello_world...Reading symbols from /Users/chenjian/Documents/Coding/Projects/RandomDev/C/hello_world.dSYM/Contents/Resources/DWARF/hello_world...done.
done.
(gdb) list
1   #include <stdio.h>
2   
3   int main() {
4       printf("Hello, World!\n");
5   }
(gdb) break main
Breakpoint 1 at 0x100000f6f: file hello_world.c, line 4.
(gdb) run
Starting program: /Users/chenjian/Documents/Coding/Projects/RandomDev/C/hello_world 
Unable to find Mach task port for process-id 42492: (os/kern) failure (0x5).
 (please check gdb is codesigned - see taskgated(8))

Тож я трохи погукався про розроблення коду і виявив це . Тому я переглянув інструкції (крім інструкцій для Snow Leopard), і вона все ще не працює! Хтось знає, як я можу змусити його працювати?


Чи хотіли б ви відповісти, що вас відключить через відключення SIP, що вбиває dtrace, налагодження та деякі інші необхідні розробникам речі?
bmike

Чи існує інший, менш руйнівний спосіб?
Гекса

@bmike гм вищевказаний коментар для вас
Hexa

Ні - (або AFAIK) вам потрібно вимкнути частину або весь SIP, щоб виконати те, що ви просите.
bmike

1
Крім того, подивіться в veertu в магазині додатків Mac. Можливо, ви швидше працюєте і працюєте в VM для ubuntu. Цілком ймовірно, що вільний VM буде ближче до установки, яку передбачає книга.
bmike

Відповіді:


1

Так, підписання коду має працювати набагато кращою альтернативою відключення SIP. Я не можу реально повірити, як часто відключення SIP пропонується як вирішення цієї проблеми - якщо ви відчайдушно я скоріше пораджу запустити sudo gdb(створити резервні копії!), Ніж відключити SIP.

Для мене проблема полягала в тому, що я неодноразово псував один або кілька кроків у процедурі. Я закінчив це brew reinstall gdb, видаливши всі створені мені сертифікати, перезавантажившись, а потім дуже обережно дотримуючись процедури. Зауважте, що при встановленні gdb за допомогою Homebrew відображається наступне:

==> Caveats
gdb requires special privileges to access Mach ports.
You will need to codesign the binary. For instructions, see:

  https://sourceware.org/gdb/wiki/BuildingOnDarwin

On 10.12 (Sierra) or later with SIP, you need to run this:

  echo "set startup-with-shell off" >> ~/.gdbinit

Ці вказівки були тим, що працювало для мене на Сьєррі. Відключення startup-with-shellпоки що не було необхідним, але варто пам’ятати, якщо ви впевнені, що ви все зробили правильно, і розділ усунення несправностей посилання не приносить користі.


0
  1. Завантаження до відновлення
  2. Відкритий термінал
  3. тип csrutil disable

Потім перезапустіть. dtraceі gdbмає працювати.

https://developer.apple.com/library/mac/documentation/Security/Conceptual/System_Integrity_Protection_Guide/ConfiguringSystemIntegrityProtection/ConfiguringSystemIntegrityProtection.html

Ви також можете запустити скрипт, щоб визначити, які частини SIP увімкнено, якщо ввімкнути його за допомогою виключень:

Одна приємна річ - вам не потрібно розслаблятися через SIP, якщо ви вирішили використовувати lldb і зможете скласти свій код з Xcode. Оскільки gdbApple не підписується Apple - це навмисно заважає приєднуватися до будь-якої системи на основі дизайну.


Дякую! Але який саме захист цілісності системи IS?
Гекса

@Hexa Можливо, вам потрібно буде прочитати вступ до першого посилання у моїй відповіді. Це пояснює SIP на загальному рівні. Я подумав, що ви побачите SystemIntegrityProtection і знаєте, що це SIP - вибачте, що не написали цього.
bmike

Ні, я не зрозумів, що захист цілісності системи - це SIP, вони просто не пояснюють це так добре у посиланні ... хоча ви, можливо, зможете детальніше зрозуміти, що це таке
Hexa

Щоб переварити розділ путівника, мені знадобилося кілька годин, і я користувався UNIX десятиліттями. Можливо, вам доведеться трохи вивчити його, перш ніж отримати його.
bmike

Тому я думаю, що пора прочитати мою книгу "Linux Kernel Development" ...
Hexa
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.