Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/5: Рейтинг темы: голосов - 5, средняя оценка - 5.00
Minchanin-Bel
5 / 5 / 3
Регистрация: 19.09.2010
Сообщений: 173
1

Запуск ассемблерного кода на выполнение из main()

10.12.2015, 08:36. Просмотров 992. Ответов 7
Метки нет (Все метки)

Добрый день. Подскажите, если есть готовый файл на ассемблерном коде, то как его можно запустить на выполнение из C++? Взаимодействовать программы не должны, .асм автономен. Как я понимаю: нужно просто загрузчику передать путь к этому файлу. Но как?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.12.2015, 08:36
Ответы с готовыми решениями:

Нужно осуществить инжект ассемблерного кода в процесс
В процессе по определённому адресу нужно заменить инструкцию. Как указать на адрес? Тоесть мне...

Вставка ассемблерного кода в С++ для очистки экрана
#include "stdafx.h" #include <conio.h> #include "iostream" #include <fstream> #include...

Как реализовать вставку ассемблерного кода в код с++ для очистки экрана?
Как реализовать вставку ассемблерного кода в код с++ для очистки экрана (аналог system("cls"),...

Нужно, чтобы в функции Main файла исходного кода происходил запуск обработки формы
Здравствуйте. Я только начала изучение windows forms и столкнулась со следующей проблемой. Мне...

Быстродействие ассемблерного кода
Кое-где прочитал что сейчас некоторые компиляторы генерируют код работающий быстрее чем аналогичный...

7
nmcf
6525 / 5749 / 2621
Регистрация: 14.04.2014
Сообщений: 24,493
10.12.2015, 08:51 2
Что значит, не должны взаимодействовать? У тебя отдельная программа на ассемблере?
0
Kastaneda
Jesus loves me
Эксперт С++
5034 / 3044 / 349
Регистрация: 12.12.2009
Сообщений: 7,668
Записей в блоге: 2
Завершенные тесты: 1
10.12.2015, 09:16 3
В asm коде должна быть какая-то точка входа (процедура), добавляешь файл в проект, компилируешь его, линкуешь с другими объектниками и можно использовать в любом месте в коде.
0
Minchanin-Bel
5 / 5 / 3
Регистрация: 19.09.2010
Сообщений: 173
10.12.2015, 14:30  [ТС] 4
Есть отдельный файл на коде асм, его можно руками скопипастить в проект на АСМ, запустить, он отработает.

Хотелось бы вызвать из кода на c++ загрузчик, в который параметром передастся путь к файлу с кодом асм, запустится новый процесс, т.е. создастся новое консольное окно, отработает этот процесс, завершится, продолжится программа на c++.

Суть в том, что этот ассемблерный файл - результат работы программы на с++, т.е. это транслятор на асм, и по завершении трансляции хотелось бы запустить результат на выполнение.
0
nmcf
6525 / 5749 / 2621
Регистрация: 14.04.2014
Сообщений: 24,493
10.12.2015, 15:22 5
Ты хочешь, чтобы твоя программа выполняла произвольный кусок на ассемблере, который даже не скомпилирован?
Так не получится.
1
Kuzia domovenok
2431 / 2158 / 528
Регистрация: 25.03.2012
Сообщений: 7,778
Записей в блоге: 1
10.12.2015, 16:09 6
откуда вообще взялось такое принципиальное условие, что выполняться должен именно кусок на ассемблере? Почему не на Яве, Питоне, СиШарпе... любом другом языке?
По-моему, ты просто "слышал звон - не знаю где он". Услышал где-то, что "программы выполняются на ассемблере" и вбил себе в голову.
Создавай экзешник - запускай его как просесс.
Ну или вообще может тебе код из ДЛЛки выполнять будет вполне достаточно.
0
Minchanin-Bel
5 / 5 / 3
Регистрация: 19.09.2010
Сообщений: 173
10.12.2015, 18:02  [ТС] 7
nmcf, понял, спасибо, обойдусь без этого

Kuzia domovenok, не про это речь была. Повторюсь: ассемблерный код - результат работы транслятора, в котором и хотелось бы отправить на выполнение код асм. Но да, nmcf верно подметил, что ещё скомпилировать надо получившийся код.
0
Evg
Эксперт CАвтор FAQ
19784 / 7425 / 559
Регистрация: 30.03.2009
Сообщений: 20,694
Записей в блоге: 30
10.12.2015, 18:31 8
Цитата Сообщение от Minchanin-Bel Посмотреть сообщение
асм автономен
Цитата Сообщение от Minchanin-Bel Посмотреть сообщение
ассемблерный код - результат работы транслятора
Эти две идеи в общем случае взаимоисключающие

--------------------------

Пример:

C
/* Файл *.c */
#include <stdio.h>
 
int
main (void)
{
  printf ("Hello world!\n");
  return 0;
}
Из Си получаем ассемблер:

Код
$ gcc t.c -S -o t.s
В итоге имеем файл t.s с ассемблерным текстом

Код
	.file	"t.c"
	.section	.rodata
.LC0:
	.string	"Hello world!"
	.text
.globl main
	.type	main, @function
main:
	leal	4(%esp), %ecx
	andl	$-16, %esp
	pushl	-4(%ecx)
	pushl	%ebp
	movl	%esp, %ebp
	pushl	%ecx
	subl	$4, %esp
	movl	$.LC0, (%esp)
	call	puts
	movl	$0, %eax
	addl	$4, %esp
	popl	%ecx
	popl	%ebp
	leal	-4(%ecx), %esp
	ret
	.size	main, .-main
	.ident	"GCC: (GNU) 4.1.2 (Gentoo 4.1.2 p1.1)"
	.section	.note.GNU-stack,"",@progbits
Но этот текст не автономен по нескольким пунктам:
1. Есть функция main, которая подразумевается как точка входа для некоторого внешнего обвеса
2. Есть вызов внешней функции puts, которая должна быть в некоторой внешней библиотеке
3. Для функций main (правда не в нашем случае) и puts есть некоторые фиксированные правила по передаче параметров и результата (в соответствии с ABI)
4. В функции main есть работа со стеком по некоторым фиксированным правилам (в соответствии с ABI)


И тем не менее в условиях системы, которая работает по нужным правилам, из этого ассемблерного текста можно получить исполняемый файл:

Код
$ gcc t.s -o a.out
$ ./a.out
Hello world!

Поэтому без внятной постановки вопроса с твоей стороны сложно на него (вопрос) ответить
1
10.12.2015, 18:31
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.12.2015, 18:31

Вставка ассемблерного кода
Код: #include &lt;stdio.h&gt; int main() { __asm{ _start:

Вставка ассемблерного кода в Си-программу
Пытаюсь написать hello world используя 2 языка(извращение имхо)... Не могу понять, что...

Вставка ассемблерного кода в код С++
С ++ (100% работает): #include &lt;stdio.h&gt; int i,m; int main(){ int A; m=0; i=8; do{ m=8*i;...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru