URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 3152
[ Назад ]

Исходное сообщение
"gcc + gas = segmentation fault"

Отправлено dimus , 12-Июл-04 13:24 
Есть программулька на С и функция на ассемблере, вызываемая из этой
программульки. Если при оформлении фрейма функции я посылаю в стек
pushl ebp
movl  esp,ebp
pushl ecx
pushl edi
то все работает прекрасно, (проценты я здесь не пишу, но они есть
где надо в соответствии с синтаксисом АТиТ)
если же я добавляю любой другой пуш, например
pushl esi
То при выполнении программы вылетает segmentation fault. Не подскажет
ли мне кто-нибудь, чем может быть вызвано такое странное поведение и
как с этим глюком бороться? Я прочитал кучу документации, но нигде
ничего подобного не описывается. Как я понял, почему-то не
распределяется стек под мою функцию, а как установить размеры стека
вручную я найти не смог.

Содержание

Сообщения в этом обсуждении
"gcc + gas = segmentation fault"
Отправлено gyn , 12-Июл-04 14:43 
>Есть программулька на С и функция на ассемблере, вызываемая из этой
>программульки. Если при оформлении фрейма функции я посылаю в стек
>pushl ebp
>movl  esp,ebp
>pushl ecx
>pushl edi
>то все работает прекрасно, (проценты я здесь не пишу, но они есть
>
>где надо в соответствии с синтаксисом АТиТ)
>если же я добавляю любой другой пуш, например
>pushl esi
>То при выполнении программы вылетает segmentation fault. Не подскажет
>ли мне кто-нибудь, чем может быть вызвано такое странное поведение и
>как с этим глюком бороться? Я прочитал кучу документации, но нигде
>ничего подобного не описывается. Как я понял, почему-то не
>распределяется стек под мою функцию, а как установить размеры стека
>вручную я найти не смог.


Стека в UNIX более чем достаточно. Проверьте, что есть popl esi перед popl edi


"gcc + gas = segmentation fault"
Отправлено dimus , 23-Июл-04 14:40 
Я все проверил - и все вроде бы ОК. А потом я с нуля переписал функцию
на другом компьютере, и все прекрасно заработало. Я так и не нашел, в чем была ошибка. А на первом компьютере я эту прогу еще не компилировал. Скомпилю - дам постинг. Но за подсказку все равно спасибо.
Кстати, я был поражен скоростью работы функции strlen. Я в тестовых целях написал свой стрлен, где длина определялась так:

movl 8(Кp),Мi
xorl Лx,Лx
xorl Йx,Йx
notl Лx
repe scacb
decl Мi

ну примерно так
так вот, библиотечная strlen работает гораздо быстрее. Хрен знает,
как это удалось. Хотелось бы взглянуть на исходный код, но у себя я его
не нашел. Не знает ли кто-нибудь, где его можно достать?
Заранее спасибо


"gcc + gas = segmentation fault"
Отправлено klalafuda , 23-Июл-04 14:43 
>так вот, библиотечная strlen работает гораздо быстрее. Хрен знает,
>как это удалось. Хотелось бы взглянуть на исходный код, но у себя
>я его
>не нашел. Не знает ли кто-нибудь, где его можно достать?
>Заранее спасибо

если бы вы еще поделились информацией о своей системе..

// wbr


"gcc + gas = segmentation fault"
Отправлено dimus , 29-Июл-04 08:04 
Slackware 9.1