Форум программистов, компьютерный форум, киберфорум
Assembler: Linux
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/21: Рейтинг темы: голосов - 21, средняя оценка - 4.71
1 / 1 / 0
Регистрация: 10.08.2015
Сообщений: 13

Вызов функции C из ассемблера

22.04.2017, 16:12. Показов 4140. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
global main
 
extern printf
extern puts
 
section .text
 
 
main:
 
 
            push msg
            call printf
 
            mov rax, 1
            mov rbx, 0
            int 80h
        
section .data
 
msg   db "Hello world", 0
Компилирую и собираю так
nasm -f elf64 fromC.asm -o hello.o
gcc -o hello hello.o
Но проблема в том, что программа не работает. Возникает дамп памяти
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
22.04.2017, 16:12
Ответы с готовыми решениями:

Вызов функции fgets() из Ассемблера
Есть необходимость вызвать функцию fgets() из кода на ассемблере, не понятно, как передать параметр, который обозначает поток. Пробовал...

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

Вызов .NET функции clrcall из ассемблера
Добрый вечер. делаю .NET хук, появилась проблема вызова из unmanaged code'a unmanaged функции Marshal.GetFunctionPointerForDelegate...

3
Asm/C++/Delphi/Py/PHP/VBA
 Аватар для Jin X
6811 / 2051 / 238
Регистрация: 14.12.2014
Сообщений: 4,301
Записей в блоге: 12
22.04.2017, 20:18
Потому что int 80h работает в 32 битах. В 64 битах вызов делается так:
Assembler
1
2
3
4
5
6
7
8
mov rax,function_number
mov rdi,param_1  ; if any
mov rsi,param_2  ; if any
mov rdx,param_3  ; if any
mov r10,param_4  ; if any
mov r8,param_5   ; if any
mov r9,param_6   ; if any
syscall  ; do it! (rcx and r11 will be destroyed)
И номера функций там тоже отличаются.
Assembler
1
__NR_exit = 60
Добавлено через 2 минуты
Скоро (надеюсь) выложу include'ы для NASM, fasm и gas с макросами и номерами функций для системных вызовов.
1
1 / 1 / 0
Регистрация: 10.08.2015
Сообщений: 13
22.04.2017, 20:19  [ТС]
Printf же это функция с переменным числом параметров. Почему он принимает аргументы через регистры? Как он понимает, сколько ему пришло аргументов? Со стековым кадром ясно. А вот с регистрами нет
0
Asm/C++/Delphi/Py/PHP/VBA
 Аватар для Jin X
6811 / 2051 / 238
Регистрация: 14.12.2014
Сообщений: 4,301
Записей в блоге: 12
22.04.2017, 20:37
whosyourdaddy, он не принимает аргументы через регистры. Он принимает через стек, только после call printf, кстати, надо сделать add esp,4 (ну или pop eax, например).
Он использует столько аргументов, сколько %-последовательностей встретит в строке + 1 (саму строку).
Именно поэтому и сделано такое соглашение о вызове как cdecl: чтобы можно было передавать любое кол-во аргументов, но стек чистить должен вызывающий, а не вызываемый код. И параметры именно поэтому записываются в обратном порядке (чтобы последний был первым, от которого и зависит кол-во аргументов).

Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
global main
 
extern printf
extern puts
 
section .text
 
main:
 
            push msg
            call printf
            pop eax  ; или add esp,4
 
            mov rax, 60
            xor rdi, rdi
            syscall
        
section .data
 
msg   db "Hello world", 0
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
22.04.2017, 20:37
Помогаю со студенческими работами здесь

Вызов фунции из ассемблера
Здравствуйте. Есть код, вызывающий несколько функций си и WinAPI. Вот так работает: void printName() { wchar_t* fmt2=L"%s"; ...

Возвращение значения из ассемблера в аргумент функции в си
Доброго времени суток! Нужна помощь. В ассемблере вычисляю с помощью сопроцессора определенную функцию. Мне нужно вызывать эту...

Вызов функции внутри другой функции с передачей локальной переменной по ссылке
Столкнулся с очень с интересной проблемой. Можно ли так делать? #include <iostream> using std::cout; void f(const int...

Вызов функции из другой функции и обратно. Общие переменные функций
Всем привет. Заранее напишу, что я ещё только изучаю программирование В данной программе генирируются числа заполняющие одним...

Вызов родовой функции (нужно передать массив в качестве аргумента функции через указатель)
#include <iostream> using namespace std; template <class T1> class mas { public: T1 n; T1 a; void input() ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Первый деплой
lagorue 16.01.2026
Не спеша развернул своё 1ое приложение в kubernetes. А дальше мне интересно создать 1фронтэнд приложения и 2 бэкэнд приложения развернуть 2 деплоя в кубере получится 2 сервиса и что-бы они. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит токи на L и напряжения на C в установ. режимах до и. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru