Искандер
стоп... или я что-то путаю...мм
s54820
Это Сишная, из libc. =)
В Си это либо переменная типа int, либо макрос, который разворачивается в выражение, получающее адрес errno из TLS.
Искандер
Есть подозрение что это очень дельное замечание... возможно это и не функция-то вовсе.... Очень благодарен!!!!
Искандер
Я дебил... нужно было вызвать функцию error()
Искандер
Проблему это, впрочем, не решило. Всё так-же "Address boundary error". Но это очень дельно, спасибо. Я бы сам точно не заметил и никуда не продвинулся был.
s54820
Проблему это, впрочем, не решило. Всё так-же "Address boundary error". Но это очень дельно, спасибо. Я бы сам точно не заметил и никуда не продвинулся был.
Там ещё порядок регистров в pop неправильный, например. Должен быть порядок, обратный push. И параметры для сисколла не передаются, и сисколл читает тот мусор, который был в регистрах.
Eugene
А зачем rsp в стек кидать?
Eugene
Ещё забавляет xor rax,rax pop rax :)
Искандер
Спасибо, я исправлю, однако когда дебажу до туда и не доходит собственно. Ошибка примерно при вызове error и происходит, уже внутри
Искандер
Ещё забавляет xor rax,rax pop rax :)
Да блин, не говорите. Совсем мозги уже плавит...
Искандер
Syscall — это инструкция без параметров. После её выполнения в linux возвращаются значения в регистра общего назначения, не во флагах. Если у тебя будет обертка, тогда работать будет.
А как примерно должна выглядеть это обертка, мне нужно сделать cmp неких байт из общего регистра, в которых содержится информация, возвращенная после выполнения Syscall? Спасибо!
Искандер
global _ft_write _ft_write: push rbp mov rax, 0x2000004 ; adress of <write> syscall syscall jnz error pop rbp ret error: call _perror pop rbp ret Сейчас примерно вот так выглядит код. Соответственно jnz после syscall, как я понимаю не особо имеет смысл, без обёртки, верно?
Искандер
test rax,rax?
Aiwan \ (•◡•) / _bot
Jcc работает с флагами. чтоб они были выставлены нужно использовать команды которые меняет флаги. в твоем случае, если ты говоришь что нужно сравнить байты, то лучше подойдет cmp. cmp сравнивет что то с чем то. и вот эти данные нужно поместить в операнды самой cmp. как эти операнды получить - тебе лучше знать
Искандер
Спасибо!
Aiwan \ (•◡•) / _bot
так а что надо сравнить то?
Aiwan \ (•◡•) / _bot
что за инфа возвращается syscall?
Искандер
Вот это и пытаюсь выяснить. По сути номер ошибки должен возвращаться, нашел на Stackoverflow вопрос, там ребята говорят, что в *ax номер ошибки лежит. По сути теперь его просто в rdi переложить и вызвать perror, а он его напечатает уже.
Aiwan \ (•◡•) / _bot
perror печатает определенное тобой сообщение, в параметрах у этой функции указатель на asciiz строку. но можешь это уточнить в манах
Aiwan \ (•◡•) / _bot
ну я думаю perror используют чтоб детектировать выполнение сишных функций, а не системных
Сергей
Всем привет! Напишите must read список книг по асму, для старта и по возрастающей
Сергей
А может такой список уже кидали тут
Anonymous
mov ebx,rmem fxsave [ebx] сделал выравнивание по 16 пробовал даже делать так shl ebx,4 ругается все равно mov ebx,rmem fxsave [ebx]
Aiwan \ (•◡•) / _bot
а что fxsave делает?
Anonymous
при выполнение fxsave меня выбрасывает в другую область памяти eip меняется
Vladimir
И кто ругается?
Anonymous
я под отладчиком запустил и меня выбросило в память куда должно сохраниться состояние
Anonymous
Anonymous
я выделил сделал align 16
Anonymous
section '.bss' readable writable align 16 mem rb 512
Vladimir
section '.bss' readable writable align 16 mem rb 512
Какое исключение-то бросает? #GP?
Anonymous
никакое просто перешло по адресу
Anonymous
mem
Anonymous
нет оно не перекидывает а очищает секцию кода на размер 512
Anonymous
странно
Anonymous
Я разобрался ошибка была глупая от невнимательности
Сергей
Сергей
Норм для старта?
Danil
Нет, потому что литература на русском, да и какую вы цель ставите ?
Сергей
Нет, потому что литература на русском, да и какую вы цель ставите ?
Я программировал но не на асме, вообще сетями занимаюсь, но хочу уровень абстракции понизить
Eugene
Я разобрался ошибка была глупая от невнимательности
Народ, вы когда вопросы задаете, информацию давайте подробную. Исходники (ссылкой) полностью (отдельно указывая на область ошибки, разумеется), текст ошибки полностью (включая номер строки), что происходит конкретно и подробно. Или вы думаете, тут телепаты сидят? На что вы рассчитываете, так формулирую вопросы?
Eugene
Сосед пьяный ругается матом за стенкой что ли?
електр🟢нік ✙🟠рчбеч ඞ
скорее всего забыл ptr
Danil
Я программировал но не на асме, вообще сетями занимаюсь, но хочу уровень абстракции понизить
По сетям под UNIX системы я бы рекомендовал Стивенса, книга так и называется UNIX Network Programming, там все примеры на С(но никто не запрещал ассемблер инлайнить прям в си код), если самоцель ассемблер, то можно что нибудь популистское почитать, например The Art of Assembly Language Programming, R. Hyde
Vladimir
А что плохого в литературе на русском?
Надмозги, которые переводят первоисточники.
Сергей
так там автор русскоязычный изначально
Eugene
Надмозги, которые переводят первоисточники.
Так, это ж не перевод, а с нуля написанная книга.
Vladimir
Так, это ж не перевод, а с нуля написанная книга.
Любая книга по программированию - это компиляция англоязычных первоисточников, или даже переводов.
Eugene
Мне, на самом деле, всегда сложно порекомендовать какую-то книгу. Потому что сам учился по разным докам, справочникам, статьям, начиная с тех времён, когда ещё интернета не было (да что там, же винда не была популярна — Dos Navigator). Потом появились форумы, что-то можно было забить в поисковиках. Из книг именно по асму помню только Юрова (причём, помню книгу, а не содержание). Вообще даже не помню, с чего начинал, вероятно с асм-вставок в паскале :) Обычно всегда (и до сих пор) происходило так: ставилась задача, в процессе реализации искались ответы на возникающие вопросы. Ну и параллельно что-то изучается. И тут список материалов бесконечный, наличная с манов Intel SDM, книг по устройству ОС, оптимизации, железу и заканчивая статьями, в т.ч. случайно попавшимися и заинтересовавшими. Так что, я думаю, можно взять для затравки какую-то более или менее свежую книгу (типа Аблязова, хотя за качество не ручаюсь) и покурить, а дальше в добрый путь :)) Я составлял год-два назад список полезных ссылок с софтом, доками, названиями книг и т.д. Но читал я их этого, кончено, не всё. Если кому надо, скину (хотя уже кидал).
Eugene
А, ещё изучение чужих исходников — тоже вещь полезная.
Eugene
Совсем свежих книг вроде и нет. А в тех, что переиздаются, просто год меняется, а текст — нет.
Eugene
Если у кого есть классные книги последних лет (не 10-ти, конечно) — кидайте. Можно на англ. Кстати, дока по фасму — отчасти годная «книга». Там и синтаксис фасма, и инструкции худо-бедно описаны. Хотя про устройство памяти, функционирование ОС, биты всякие не описано, вроде как совсем.
електр🟢нік ✙🟠рчбеч ඞ
я начинал учить асм с книжки "nasm for unix"
електр🟢нік ✙🟠рчбеч ඞ
но хотел бы поделиться наблюдением своим. микроконтроллеры мне всегда давались гораздо легче, потому что у них проще организация и можно весь процессор держать в голове (тот же AVR). с них можно научиться таким базовым вещам, к которым на х86 ты будешь приходить долго и больно. поэтому всегда рекомендовал бы начать с них.
Eugene
Вообще, действительно, хорошо бы для начала определиться с платформой (процессоры, ОС), под которую собираешься писать. Это ж не Си :)
­
Нет, потому что литература на русском, да и какую вы цель ставите ?
Да ладно тебе, норм книга, хоть немного и устаревшая.
Vladimir
Мне, на самом деле, всегда сложно порекомендовать какую-то книгу. Потому что сам учился по разным докам, справочникам, статьям, начиная с тех времён, когда ещё интернета не было (да что там, же винда не была популярна — Dos Navigator). Потом появились форумы, что-то можно было забить в поисковиках. Из книг именно по асму помню только Юрова (причём, помню книгу, а не содержание). Вообще даже не помню, с чего начинал, вероятно с асм-вставок в паскале :) Обычно всегда (и до сих пор) происходило так: ставилась задача, в процессе реализации искались ответы на возникающие вопросы. Ну и параллельно что-то изучается. И тут список материалов бесконечный, наличная с манов Intel SDM, книг по устройству ОС, оптимизации, железу и заканчивая статьями, в т.ч. случайно попавшимися и заинтересовавшими. Так что, я думаю, можно взять для затравки какую-то более или менее свежую книгу (типа Аблязова, хотя за качество не ручаюсь) и покурить, а дальше в добрый путь :)) Я составлял год-два назад список полезных ссылок с софтом, доками, названиями книг и т.д. Но читал я их этого, кончено, не всё. Если кому надо, скину (хотя уже кидал).
Тогда ещë была довольно популярная серия "Библиотека системного программиста" Фроловых. На безинетье была вполне даже ничего.
Искандер
Друзья, а почему у некоторых extern функций одни\два нижних подчеркивания а у других три? _puts _perror ___error (три)
Искандер
Отредактировал :)
Aiwan \ (•◡•) / _bot
👍
s54820
Друзья, а почему у некоторых extern функций одни\два нижних подчеркивания а у других три? _puts _perror ___error (три)
Зависит от ОС. В Винде одним _ декорируют __cdecl. Ещё одна _ — у нестандартных функций в сишном рантайме (потому что такие имена зарезервированы стандартом языка). Насчёт трёх не знаю.
JeisonWi
https://gpfault.net/posts/asm-tut-1.txt.html
Dmitrij
https://gpfault.net/posts/asm-tut-1.txt.html
афигеть! метапрограммирование в асме ))
Eugene
Что тут странного? Для асма это вполне естественно. Мне кажется, макросы завезли раньше, чем мы все под стол ходить начали.
Danil
афигеть! метапрограммирование в асме ))
Да ничего удивительного, без макросов в энтерпрайз коде можно с ума сойти
Dmitrij
У меня метапрограммирование больше ассоциируется с шаблонным програмированием (с++), так что наверное я удивился преждевременно и тому, что существует только в моей голове. С макроассемблером (макрописание) я знаком в GNU ASM, в fasm'e интересная реализация всего этого - реально красивый подход. Когда я выбирал какой asm учить, выбрал GAS только потому, что он почти на всех платформах присутствует. Иногда, представляется возможность подсмотреть что да как в других асмах (ну к примеру вот эту ссылку кинули), и реально красивые решения встречаются )) Взять тот же макрос invoke в примерах для FASM, я подсмотрел(увидел) и запилил для GAS, ну правда ещё в сыром виде (не тподдержки флоатов в аргументах и регистров)...
Eugene
В FASM можно писать программы чисто на макросах. В силу наличия virtual, load, store. Т.е. можно сделать шифровальщик, пакер, парсер, выдёргиватель каких-то данных, конвертер и многое другое...
Eugene
Генерить всякие данные — само собой.
Eugene
Т.е. запускаешь fasm и на выходе получаешь не бинарник скомпиленной программы, а результат работы программы на макросах. Я в пределах предыдущих 2-х недель писал как раз несколько вещей в стиле "перевести 16-битный WAV в ADPCM", "взять BMP и сгенерить файл с палитрой и файл с картинкой (с разбивкой по битовым плоскостям для EGA)", "вытащить упакованные данные из сжатой UPX'ом проги", "сгенерить таблицу с палитрой возможных цветов для EGA"... Есть примеры AES-кодирования файла :) Мощная штука на самом деле!
Dmitrij
Евгений, спс за инфу !