OSDev

для всех
Текущее время: 01 май 2024, 14:14

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 26 ]  На страницу Пред.  1, 2, 3  След.
Автор Сообщение
СообщениеДобавлено: 12 мар 2011, 16:31 

Зарегистрирован: 21 сен 2007, 17:24
Сообщения: 1088
Откуда: Балаково
Большое значение имеет тип предполагаемых экзешников - PE или ELF. Если Windows-совместимый PE, то любые компиляторы от MS или любые "под Windows", а если Unix-совместимый ELF, то нужны компиляторы от GNU (под Windows они тоже есть).


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 12 мар 2011, 21:51 

Зарегистрирован: 05 мар 2011, 23:01
Сообщения: 6
SII писал(а):
А делать надо не бинарники, а объектники, что, собственно, компилятор и делает. А дальше уже собирать то, что нужно, причём не обязательно компоновщиком от Студии, можно и другим, понимающим КОФФы. Можно и обычные ЕХЕшники получать, кстати: всё равно адреса загрузки большинства модулей системы становятся точно известны лишь в процессе работы, поскольку карта распределения памяти отнюдь не фиксирована и может меняться от машины к машине, а значит, сие надо выяснять по ходу дела.

В общем мне нужно получать чистые бинарники с помощью студии, без ссылок на kernel.dll(это разобрался) и особенно без функций которые к рантайму обращаются!!!
Himik писал(а):
Большое значение имеет тип предполагаемых экзешников - PE или ELF. Если Windows-совместимый PE, то любые компиляторы от MS или любые "под Windows", а если Unix-совместимый ELF, то нужны компиляторы от GNU (под Windows они тоже есть).

Это я знаю - но как написал выше, нужны чистые бинарники - ибо прогать не "под винду" или других ос...

У меня есть еще идея, но она схожа с идеей психа) - если писать код в студии и делать вывод асма в файл и потом редактировать и компилить NASM'ом

_________________
by GHOST1st


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 13 мар 2011, 08:44 

Зарегистрирован: 28 окт 2007, 18:33
Сообщения: 1418
Делать бинарники -- изначально неверный подход, надо получать именно перемещаемые модули, которые будут загружаться и настраиваться на конкретное местоположение самописным загрузчиком. Ну а чтобы не цепляла лишние DLL, достаточно писать так, чтобы к ним не было обращений, ну и написать свой стартовый код (с которого реально начинается выполнение программы и который в конце концов передаёт управление функции main или WinMain).


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 13 мар 2011, 16:01 

Зарегистрирован: 05 мар 2011, 23:01
Сообщения: 6
SII писал(а):
Делать бинарники -- изначально неверный подход, надо получать именно перемещаемые модули, которые будут загружаться и настраиваться на конкретное местоположение самописным загрузчиком.

Я это знаю... Мне нужен чистый бинарник, который можно писать на Си, например:
Код:
int func(void){
return 0;
}

И этот код компилируется в бинарник, в котором только этот код и ничего лишнего, как быть???
Такое существует вообще???
SII писал(а):
... Ну а чтобы не цепляла лишние DLL, достаточно писать так, чтобы к ним не было обращений, ну и написать свой стартовый код (с которого реально начинается выполнение программы и который в конце концов передаёт управление функции main или WinMain).

Если не сложно, можешь пример показать??? Я может плохо пытаюсь, но CRT (Common Run-Time) все равно цепляется!!! Пишет неразрешенный внешний символ __CRTMainStartup() (вроде так называется)!!!
ЗЫ: Мне не нужна ни винда, ни linux'ы, и ничего другого...

_________________
by GHOST1st


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 13 мар 2011, 23:58 

Зарегистрирован: 28 окт 2007, 18:33
Сообщения: 1418
Я не использую Си, поэтому подробностей не знаю. Но точно знаю, что _ничего_ сложного в подмене стартового кода нет, достаточно уметь пользоваться компилятором командной строки и получать с его помощью _объектный_, а не исполняемый файл, а затем уже компоновщиком ("линкером" на жаргоне) связывать его с написанным на ассемблере стартовым модулем собственного производства (а не стандартным). Совсем без ассемблера обойтись здесь невозможно. Можно ли сей процесс автоматизировать в Студии (чтобы не прибегать к помощи командной строки), я не знаю, однако в инструментах, предназначенных для программирования микроконтроллеров, можно, в Дельфях -- тоже, так что, наверное, и со Студией тоже всё получится, но сначала надо научиться делать это из командной строки. Умеет ли компоновщик Студии выдавать бинарники, я тоже не знаю, но, как уже говорил, на практике они и не нужны, лучше сразу привыкать иметь дело с перемещаемыми файлами (ПЕ-КОФФ в случае Студии) и написать для них свой загрузчик.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 14 мар 2011, 01:11 

Зарегистрирован: 21 сен 2007, 17:24
Сообщения: 1088
Откуда: Балаково
Нашёл пример здесь:
http://board.sysbin.com/viewtopic.php?t ... &start=105
В общем, главное указать линковщику имя входной функции /ENTRY:main

test.cpp:
Код:
int main ()
{
for (;;);

return 0;
}

build.cmd (из командной строки):
@echo off
rem Set environment
call vcvars32.bat

cl test.cpp /c /nologo /GS- /GR- /Ox /TP /Gm /Zi
if %ERRORLEVEL% NEQ 0 exit

link test.obj /ENTRY:main /RELEASE /OUT:"test.bin" /SUBSYSTEM:NATIVE /NODEFAULTLIB /MACHINE:X86 /BASE:0x0 /MERGE:.text=.data /MERGE:.rdata=.data /IGNORE:4254

objcopy test.bin new.bin -I pe-i386 -O binary


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 15 мар 2011, 00:34 

Зарегистрирован: 05 мар 2011, 23:01
Сообщения: 6
Всем спасибо!!! Разобрался наконец-то!!!

_________________
by GHOST1st


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 04 май 2011, 19:27 

Зарегистрирован: 04 май 2011, 18:13
Сообщения: 121
1. YASM, NASM
2. VisualStudio
3. QEMU
4. WinHEX
5. IDA Pro


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 12 май 2011, 17:29 

Зарегистрирован: 02 янв 2011, 12:05
Сообщения: 7
1) FASM
2) TinyCC
3) QEMU
4) JEEX
5) BIEW... в редких случаях IDA


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 25 май 2011, 13:23 
Аватара пользователя

Зарегистрирован: 20 апр 2011, 10:54
Сообщения: 145
FASM+TinyCC(маленький, быстрый, бесплатный)+Binlink(генерирует плоские файлы из COFF, говорят есть проблемы, но есть его продолжение Coffe, которое висит здесь, на форуме)+Objconv(конвертер ELF/COFF,TinyCC плохо работает с COFFами, или это я глупый+дизассемблер объектных файлов(вот это уже полезнее))+HDasm(Для меня главный критерий - маленький! Можно найти на wasm.ru)

_________________
Found a CPU. LAPIC ID: 00


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 26 ]  На страницу Пред.  1, 2, 3  След.

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 11


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB