Есть программулька на С и функция на ассемблере, вызываемая из этой
программульки. Если при оформлении фрейма функции я посылаю в стек
pushl ebp
movl esp,ebp
pushl ecx
pushl edi
то все работает прекрасно, (проценты я здесь не пишу, но они есть
где надо в соответствии с синтаксисом АТиТ)
если же я добавляю любой другой пуш, например
pushl esi
То при выполнении программы вылетает segmentation fault. Не подскажет
ли мне кто-нибудь, чем может быть вызвано такое странное поведение и
как с этим глюком бороться? Я прочитал кучу документации, но нигде
ничего подобного не описывается. Как я понял, почему-то не
распределяется стек под мою функцию, а как установить размеры стека
вручную я найти не смог.
>Есть программулька на С и функция на ассемблере, вызываемая из этой
>программульки. Если при оформлении фрейма функции я посылаю в стек
>pushl ebp
>movl esp,ebp
>pushl ecx
>pushl edi
>то все работает прекрасно, (проценты я здесь не пишу, но они есть
>
>где надо в соответствии с синтаксисом АТиТ)
>если же я добавляю любой другой пуш, например
>pushl esi
>То при выполнении программы вылетает segmentation fault. Не подскажет
>ли мне кто-нибудь, чем может быть вызвано такое странное поведение и
>как с этим глюком бороться? Я прочитал кучу документации, но нигде
>ничего подобного не описывается. Как я понял, почему-то не
>распределяется стек под мою функцию, а как установить размеры стека
>вручную я найти не смог.
Стека в UNIX более чем достаточно. Проверьте, что есть popl esi перед popl edi
Я все проверил - и все вроде бы ОК. А потом я с нуля переписал функцию
на другом компьютере, и все прекрасно заработало. Я так и не нашел, в чем была ошибка. А на первом компьютере я эту прогу еще не компилировал. Скомпилю - дам постинг. Но за подсказку все равно спасибо.
Кстати, я был поражен скоростью работы функции strlen. Я в тестовых целях написал свой стрлен, где длина определялась так:movl 8(Кp),Мi
xorl Лx,Лx
xorl Йx,Йx
notl Лx
repe scacb
decl Мiну примерно так
так вот, библиотечная strlen работает гораздо быстрее. Хрен знает,
как это удалось. Хотелось бы взглянуть на исходный код, но у себя я его
не нашел. Не знает ли кто-нибудь, где его можно достать?
Заранее спасибо
>так вот, библиотечная strlen работает гораздо быстрее. Хрен знает,
>как это удалось. Хотелось бы взглянуть на исходный код, но у себя
>я его
>не нашел. Не знает ли кто-нибудь, где его можно достать?
>Заранее спасибоесли бы вы еще поделились информацией о своей системе..
// wbr
Slackware 9.1