169 похожих чатов

Чуваки, вот у меня есть такой код: # include <stdio.h> int main() {

char name[10000000];
}

Если его скомпилить и исполнить, то будет такая ошибка:
Segmentation fault: 11

Очевидно это из-за слишком большого размера массива. Я, допустим, этого не знаю и хочу отдебажить

Компилирую таким образом:
$: gcc index.c -g

Дальше запускаю скомпилированную программу вот так:
$: lldb ./a.out
(lldb): run

Вижу ошибку
* thread #1, queue = 'com.apple.main-thread', stop reason = EXC_BAD_ACCESS (code=2, address=0x7ffeef3ffff8)
frame #0: 0x00007fff204ca47f libsystem_pthread.dylib`___chkstk_darwin + 55
libsystem_pthread.dylib`___chkstk_darwin:
-> 0x7fff204ca47f <+55>: testq %rcx, -0x8(%rcx)
0x7fff204ca483 <+59>: cmpq $0x1000, %rax ; imm = 0x1000
0x7fff204ca489 <+65>: jb 0x7fff204ca4a5 ; <+93>
0x7fff204ca48b <+67>: pushq %rax
Target 0: (runme) stopped.

Из ошибки ясно, что она происходит на инстуркции testq %rcx, -0x8(%rcx) в функции ___chkstk_darwin shared библиотеки libsystem_pthread.dylib

Дальше я ставлю брейкпоинт на эту библиотеку и запускаю программу снова
(lldb): breakpoint set --shlib libsystem_pthread.dylib --name ___chkstk_darwin
(lldb): run

Брейкпоинт сраюатывает и получаю это:
* thread #1, queue = 'com.apple.main-thread', stop reason = breakpoint 1.1
frame #0: 0x00007fff204ca448 libsystem_pthread.dylib`___chkstk_darwin
libsystem_pthread.dylib`___chkstk_darwin:
-> 0x7fff204ca448 <+0>: pushq %rcx
0x7fff204ca449 <+1>: leaq 0x10(%rsp), %rcx
0x7fff204ca44e <+6>: cmpq %rcx, %gs:-0x30
0x7fff204ca457 <+15>: jb 0x7fff204ca483 ; <+59>


А че дальше делать?
Как мне понять что это ошибки именно из-за слишком размера массива?
Через череду next я приду к той же ошибке, но всё равно не понимаю как понять что это именно связано с массивом.
Есть у кого-то алгоритм дебага, по которому можно точно понять, что это связано с массивом?
На C всегда так больно дебажить?

6 ответов

5 просмотров
Dmitry-Croft Автор вопроса

В конце моего сообщения есть несколько вопросов, на них можно ответить и я буд счастлив

Гуглил?

Это внутренняя функция библиотеки, не предназначенная для вызова её пользователями. Скорее всего, она проверяет canary word, по которому определяется переполнение стека. Но тебе, как пользователю библиотеки, это всё равно ничего не даст.

А с чего ты взял, что эта функция есть в линуксе? :)

Dmitry-Croft Автор вопроса

По аналогии с другими ос, но вообще не гуглится

Внутренние функции библиотек, не относящиеся к поддерживаемому API, не обязаны называться (или, вообще, существовать в виде функций) в разные системах.

Похожие вопросы

Обсуждают сегодня

читать файл максимально быстро? странный вопрос))
zamtmn
53
тоесть, указав return eax, сгенерируется никому ненужная инструкция mov eax,eax ?
Aiwan \ (•◡•) / _bot
24
я имею в виду официально интегрированный в телегу? в том плане что не сливает переписку с пользователем?
Andrey
9
Кто-нибудь решал проблему с автоматическим скроллингом к выбранной ячейке в TDBGrid в Lazarus? Проблема в том, что есть допустим 3 столбца, третий столбец виден наполовину, вк...
Дмитрий Логинов
1
А чего сейчас в моде вместо Error для эксепшенов? А то я тут внезапно узрел что он не рекомендуется :) У Try::Tiny какой-то совершенно ужасный синтаксис если надо конкретные э...
Denis F
19
Приветствуем всех! Устали без проектов? Если вы программист и хотите получать стабильные заказы, компания Elif предлагает вам недельный курс по поиску проектов и их ведению. ...
Elif
1
а зачем этот вопрос для удаления из чата?
Mёdkinson Medvezhkin
63
Чорт! Чорт! Чорт! Стала ставить через GetIt (написано же, что ручками не рекомендуется) Сломалось на дублировании моей TSkLabel. Чтож мне ее по всем проектам переименовывать в...
Катерина Свиридова
7
Привет. Сразу скажу, что на C/C++/Rust я не пишу, но тем не менее возникла потребность дебага C/C++/Rust кода. Суть: есть серверное приложение, которое периодически ведёт себ...
ninekeem 🐳
4
всем привет! углубившись в плюсы и начав изучать реверсинг понял, что без асм'а никуда со своими высокоабстрактными представлениями начал изучать механизмы асма, и не совсем п...
9
Карта сайта