GCC выработка компилятором машинного кода

Привет Всем!
Ради прикола, ради интереса и ради коллекции стало интересно, как будет выглядеть машинный код, и как его посмотреть?
Программный код на с++ "Hello World!" файла hello.cpp будет выглядеть так:

#include <iostream>
using namespace std;
int main () 
{
cout << "Hello world in ANSI-C++\n";
return 0;
}

а ассемблерный "Hello World!" файла hello.cpp через g++ -S hello.cpp -o 1 так:

	.file	"hello.cpp"
	.local	_ZStL8__ioinit
	.comm	_ZStL8__ioinit,1,1
	.section	.rodata
.LC0:
	.string	"Hello world in ANSI-C++\n"
	.text
.globl main
	.type	main, @function
main:
.LFB957:
	.cfi_startproc
	.cfi_personality 0x0,__gxx_personality_v0
	pushl	%ebp
	.cfi_def_cfa_offset 8
	movl	%esp, %ebp
	.cfi_offset 5, -8
	.cfi_def_cfa_register 5
	andl	$-16, %esp
	subl	$16, %esp
	movl	$.LC0, 4(%esp)
	movl	$_ZSt4cout, (%esp)
	call	_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc
	movl	$0, %eax
	leave
	ret
	.cfi_endproc
.LFE957:
	.size	main, .-main
	.type	_Z41__static_initialization_and_destruction_0ii, @function
_Z41__static_initialization_and_destruction_0ii:
.LFB961:
	.cfi_startproc
	.cfi_personality 0x0,__gxx_personality_v0
	pushl	%ebp
	.cfi_def_cfa_offset 8
	movl	%esp, %ebp
	.cfi_offset 5, -8
	.cfi_def_cfa_register 5
	subl	$24, %esp
	cmpl	$1, 8(%ebp)
	jne	.L5
	cmpl	$65535, 12(%ebp)
	jne	.L5
	movl	$_ZStL8__ioinit, (%esp)
	call	_ZNSt8ios_base4InitC1Ev
	movl	$_ZNSt8ios_base4InitD1Ev, %eax
	movl	$__dso_handle, 8(%esp)
	movl	$_ZStL8__ioinit, 4(%esp)
	movl	%eax, (%esp)
	call	__cxa_atexit
.L5:
	leave
	ret
	.cfi_endproc
.LFE961:
	.size	_Z41__static_initialization_and_destruction_0ii, .-_Z41__static_initialization_and_destruction_0ii
	.type	_GLOBAL__I_main, @function
_GLOBAL__I_main:
.LFB962:
	.cfi_startproc
	.cfi_personality 0x0,__gxx_personality_v0
	pushl	%ebp
	.cfi_def_cfa_offset 8
	movl	%esp, %ebp
	.cfi_offset 5, -8
	.cfi_def_cfa_register 5
	subl	$24, %esp
	movl	$65535, 4(%esp)
	movl	$1, (%esp)
	call	_Z41__static_initialization_and_destruction_0ii
	leave
	ret
	.cfi_endproc
.LFE962:
	.size	_GLOBAL__I_main, .-_GLOBAL__I_main
	.section	.ctors,"aw",@progbits
	.align 4
	.long	_GLOBAL__I_main
	.weakref	_ZL20__gthrw_pthread_oncePiPFvvE,pthread_once
	.weakref	_ZL27__gthrw_pthread_getspecificj,pthread_getspecific
	.weakref	_ZL27__gthrw_pthread_setspecificjPKv,pthread_setspecific
	.weakref	_ZL22__gthrw_pthread_createPmPK14pthread_attr_tPFPvS3_ES3_,pthread_create
	.weakref	_ZL20__gthrw_pthread_joinmPPv,pthread_join
	.weakref	_ZL21__gthrw_pthread_equalmm,pthread_equal
	.weakref	_ZL20__gthrw_pthread_selfv,pthread_self
	.weakref	_ZL22__gthrw_pthread_detachm,pthread_detach
	.weakref	_ZL22__gthrw_pthread_cancelm,pthread_cancel
	.weakref	_ZL19__gthrw_sched_yieldv,sched_yield
	.weakref	_ZL26__gthrw_pthread_mutex_lockP15pthread_mutex_t,pthread_mutex_lock
	.weakref	_ZL29__gthrw_pthread_mutex_trylockP15pthread_mutex_t,pthread_mutex_trylock
	.weakref	_ZL31__gthrw_pthread_mutex_timedlockP15pthread_mutex_tPK8timespec,pthread_mutex_timedlock
	.weakref	_ZL28__gthrw_pthread_mutex_unlockP15pthread_mutex_t,pthread_mutex_unlock
	.weakref	_ZL26__gthrw_pthread_mutex_initP15pthread_mutex_tPK19pthread_mutexattr_t,pthread_mutex_init
	.weakref	_ZL29__gthrw_pthread_mutex_destroyP15pthread_mutex_t,pthread_mutex_destroy
	.weakref	_ZL30__gthrw_pthread_cond_broadcastP14pthread_cond_t,pthread_cond_broadcast
	.weakref	_ZL27__gthrw_pthread_cond_signalP14pthread_cond_t,pthread_cond_signal
	.weakref	_ZL25__gthrw_pthread_cond_waitP14pthread_cond_tP15pthread_mutex_t,pthread_cond_wait
	.weakref	_ZL30__gthrw_pthread_cond_timedwaitP14pthread_cond_tP15pthread_mutex_tPK8timespec,pthread_cond_timedwait
	.weakref	_ZL28__gthrw_pthread_cond_destroyP14pthread_cond_t,pthread_cond_destroy
	.weakref	_ZL26__gthrw_pthread_key_createPjPFvPvE,pthread_key_create
	.weakref	_ZL26__gthrw_pthread_key_deletej,pthread_key_delete
	.weakref	_ZL30__gthrw_pthread_mutexattr_initP19pthread_mutexattr_t,pthread_mutexattr_init
	.weakref	_ZL33__gthrw_pthread_mutexattr_settypeP19pthread_mutexattr_ti,pthread_mutexattr_settype
	.weakref	_ZL33__gthrw_pthread_mutexattr_destroyP19pthread_mutexattr_t,pthread_mutexattr_destroy
	.ident	"GCC: (Gentoo 4.4.5 p1.2, pie-0.4.5) 4.4.5"
	.section	.note.GNU-stack,"",@progbits

gcc hello.cpp -O

gcc hello.cpp -O hello
hexdump hello | less

просто скомпилировав

просто скомпилировав программу вы получите elf файл в котором, огромное количество информации помимо собственно исполняемого кода

если имя скомпиленой

если имя скомпиленой программы program, то

objdump -d program

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

И еще, если вы хотите посмотреть, как именно gcc оптимизирует тот или иной код, то во первых включите таки оптимизацию (у вас она выключена), и во вторых запихните код, который хотите оптимизировать в отдельную функцию, а потом найдите ее в objdump -d program например и там смотрите, чтоб ваш код не путался с всяким "служебным" кодом для инициализации всякого разного.

сделал objdump -d /bin/ls -

del

Compute:
Bosch M2.8.1 -> custom Bosch M2.8.3 clone from Russia.
Speed about 260 km,Ram 2 pers.,HDD - 70 kg,210 FLOPS ;)

единственное что можно

единственное что можно сделать (а может и нет):

hexdump 1

и перевести 16-ую систему счисления в 2-ую, кому интересно это выглядит так "Hello World!"

Keep tryin' me jerk off, keep tryin' me... wanna impress her? Impress her with me. Impress her with ME!

Твой опкод не выводит Хелло,

Твой опкод не выводит Хелло, ворлд, - с уважением, ваш КО.
если внимательно посмотреть на крестовый исходник вооруженным взгядом, то можно заметить подключение библиотек, а т.к код собран не статически .....

Compute:
Bosch M2.8.1 -> custom Bosch M2.8.3 clone from Russia.
Speed about 260 km,Ram 2 pers.,HDD - 70 kg,210 FLOPS ;)

Подскажите пожалуйста, как

Так это же hexdump скомпилированного hello.cpp
Я хочу диктовать 0 и 1 интерпретатору gcc :) в итоге я хочу как-бы обратно запустить компилятор и создать файл с кодом "Hello world!" потом скомпилировать его и запустить.

PS: Если есть язык верхнего уровня который переходит в язык ассемблера который переходит в машинный код (который сводиться к 0 и 1), то получается можно настроить все для с функции обратного действия (как перфокарты), для этого мне и нужно узнать точный код программы.

Keep tryin' me jerk off, keep tryin' me... wanna impress her? Impress her with me. Impress her with ME!

Если честно я нихрена не

Если честно, я нихрена не понял из этого потока сознания, который вы сейчас выдали, но я уверяю вас, что тот код, который приведен в вашей ссылке, не является бинарным представлением исполняемых инструкций вашей программы (это очевидно даже если просто посмотреть на длину этого кода). потому что, как я уже писал выше, в файле с программой кроме кода еще куча другой информации. и его hexdump штука весьма бесполезная.

gry написал(а): бинарным

gry написал(а):
бинарным представлением исполняемых инструкций вашей программы

как увидеть то? код в первом посте, gcc у вас на машине. Аминь!

Keep tryin' me jerk off, keep tryin' me... wanna impress her? Impress her with me. Impress her with ME!

ради коллекции стало

ради коллекции стало интересно, как будет выглядеть машинный код, и как его посмотреть?

примерно так

00100010101001001010100100101001010010101010010101000000000010111010001

:)
сильно зависит от оптимизации, проца и фаз луны. Добратся до процессорного кода в соеременных процах не представляется возможным

Compute:
Bosch M2.8.1 -> custom Bosch M2.8.3 clone from Russia.
Speed about 260 km,Ram 2 pers.,HDD - 70 kg,210 FLOPS ;)

бред

бред

evadim забанен за хамское поведение и нецензурную речь

что именно ?

что именно ?

Compute:
Bosch M2.8.1 -> custom Bosch M2.8.3 clone from Russia.
Speed about 260 km,Ram 2 pers.,HDD - 70 kg,210 FLOPS ;)

96

да все вам понятно: как увидеть машинный код программы "hello world" самого низкого уровня?

Keep tryin' me jerk off, keep tryin' me... wanna impress her? Impress her with me. Impress her with ME!

примерно так

примерно так http://ref.x86asm.net/coder.html.
В более читабельной форме так - http://www.realcoding.net/article/view/1771

дальше можешь повтыкать в темплейты асмовского компилятора

Ты скажи толком, что ты хочешь, потому что сдается мне, что ты не там ищешь

Compute:
Bosch M2.8.1 -> custom Bosch M2.8.3 clone from Russia.
Speed about 260 km,Ram 2 pers.,HDD - 70 kg,210 FLOPS ;)

234

я хочу ясно представлять цепочку событий: с++ передает код ассемблеру, ассемблер передает код машине (мне это и хочется посмотреть, как выглядит то что ассемблер передает машине, когда запускаю компиляцию через g++)

Keep tryin' me jerk off, keep tryin' me... wanna impress her? Impress her with me. Impress her with ME!

ассемблер передает код

 ассемблер передает код машине

ассемблер НЕ передает код машине

Для начала почитай про elf загрузчик ( на Линуксе) или про PE загрузчик ( в виндовсе)

Compute:
Bosch M2.8.1 -> custom Bosch M2.8.3 clone from Russia.
Speed about 260 km,Ram 2 pers.,HDD - 70 kg,210 FLOPS ;)

Ассемблер - компилятор

Ассемблер - компилятор исходного текста программы, в программу на машинном языке. Я это имел ввиду.

Вы знаете как выглядит программа с первого поста на машинном языке?

например: Программа «Hello, World!» для процессора архитектуры x86 выглядит следующим образом (в шестнадцатеричном представлении по байтно):BB 11 01 B9 0D 00 B4 0E 8A 07 43 CD 10 E2 F9 CD 20 48 65 6C 6C 6F 2C 20 57 6F 72 6C 64 21

Keep tryin' me jerk off, keep tryin' me... wanna impress her? Impress her with me. Impress her with ME!

Вы знаете как выглядит

Вы знаете как выглядит программа с первого поста на машинном языке?

1) Привиденный вами пример не верен в 98% архитектур :)
2) Вы уверены в что она выглядит именно так ? а как я могу в это проверить ? как минимум ответьте, куда именно, на какое устройство будет выведены искомые буквы :)

Compute:
Bosch M2.8.1 -> custom Bosch M2.8.3 clone from Russia.
Speed about 260 km,Ram 2 pers.,HDD - 70 kg,210 FLOPS ;)

с++ кроссплатформенный язык

с++ кроссплатформенный язык, компилятор gcc пропускает программу через этапы лексического анализа, синтаксического анализа, контроля типов и генерации кода это мне и нужно (код до появления ELFhello: file format elf32-i386
architecture: i386, flags 0x00000112:
EXEC_P, HAS_SYMS, D_PAGED
start address 0x08048560
) less hello = http://paste.pocoo.org/show/385918/ или он же в двоичном после hexdump = http://paste.pocoo.org/show/385438/

Keep tryin' me jerk off, keep tryin' me... wanna impress her? Impress her with me. Impress her with ME!

вам в 100-й раз пытаются

вам в 100-й раз пытаются обяснить, что ваш так называемый целевой код

 (less hello = http://paste.pocoo.org/show/385918/) или он же в двоичном после hexdump = http://paste.pocoo.org/show/385438/

не более, чем профанация.

Я уже упоминал такие слова как elf, PE, загрузчик. могу добавить bfd, ld --as-needed, shared . К сожалению, я не системщик, и не претендую на доскональное знание вопроса.
Поэтому рекомендую узнать побольше про вышеназванные понятия и потом задавть вопросы дальше.

P.S подсказака наверное - start address 0x08048560

Compute:
Bosch M2.8.1 -> custom Bosch M2.8.3 clone from Russia.
Speed about 260 km,Ram 2 pers.,HDD - 70 kg,210 FLOPS ;)

slepnoga написал(а): вам в

slepnoga написал(а):
вам в 100-й раз пытаются обяснить

А не будет уже глумиться-то? Все прекрасно поняли суть интересующего ТС вопроса (и вменяемые ответы уже были ему даны), вы же придираетесь к тому, что вопрос был задан без глубинного знания и учёта особенностей сферы, в которой, как вы заметили, ТС безнадёжно плавает... Обрадовались, что можно безнаказанно покусать? Вы что, энергетический вампир, и таким способом подпитываете собственное эго?

Мы тоже не всего читали Шнитке!.. © В. Вишневский

Добро побеждает!

Добро побеждает!

Keep tryin' me jerk off, keep tryin' me... wanna impress her? Impress her with me. Impress her with ME!

Блин, реально мне было

Блин, реально мне было интересно помочь в данном вопросе; может человеку стало реально интересно, как же оно работает, как вкто же читает ельфиков и как они интерпритируются.
В очередной раз убедился - хорошими делами прославится нельзя :( .
НУ и поновой доктрине о ТС либо хорошо, либо никак. Поэтому сделаем так- процитируем одного писателя:

"Лозунг гарный, цель погана"

Compute:
Bosch M2.8.1 -> custom Bosch M2.8.3 clone from Russia.
Speed about 260 km,Ram 2 pers.,HDD - 70 kg,210 FLOPS ;)

Недавно на форуме была

Недавно на форуме была открыта тема "Общение на форуме". И вот яркий пример некорректного поведения со стороны человека являющегося модератором. Подобные мелочи и составляют не здоровую атмосферу.

evadim забанен за хамское поведение и нецензурную речь

Oochee3m написал(а): И вот

Oochee3m написал(а):
И вот яркий пример некорректного поведения со стороны человека являющегося модератором.

Это ты о ком?
Где именно?

По размышлении смею

По размышлении смею предположить, что если таки грузануть прогу в памаять и сдампить со стратового адреса, не забыв про всякие jmp то вот она, родимая, и будет

Compute:
Bosch M2.8.1 -> custom Bosch M2.8.3 clone from Russia.
Speed about 260 km,Ram 2 pers.,HDD - 70 kg,210 FLOPS ;)

я про это и говорю, я хочу

я про это и говорю, фрикерство конечно, но я хочу настроить микрофон при продиктовать нули и единицы интерпретатору, а он мне сделает ELF файл и запишет его на диск.
objdump --disassemble hello

Keep tryin' me jerk off, keep tryin' me... wanna impress her? Impress her with me. Impress her with ME!

Изыйди, пожалуйста. Не

Изыйди, пожалуйста. Не нарывайся, на хамство

Compute:
Bosch M2.8.1 -> custom Bosch M2.8.3 clone from Russia.
Speed about 260 km,Ram 2 pers.,HDD - 70 kg,210 FLOPS ;)

Иногда в процессе компиляйии

Иногда в процессе компиляйии (упаковки исходного кода в конечную эксешку), среда программирования, записывает программу не в байт коды, а в коды промежуточного языка. Пусть не столь сильного и скоростного, но зато более универсального чем ассемблер. Например дельфи записывает ехе в коды CIL - это такой промежуточный язык программирования. Для тгго чтобьы при запуски исполняемого файла на другом компьютере (к примеру с процессором отличным от процессора того компа на котором откомпилировали), не возникало ошибки, мол: "при разработки программы использовался несовместимый листинг процессорных команд". Промежуточный язык он принимает на себя весь "удар" во время запуска "ехе" на другом проце. А Он уже в свою очередь на лету переводит коды CIL языка(коды из данной подопытной ехе , разумеется), в байт код данной машины. И так происходит на каждом компьютере где её запускают. Ещё я слышал что Бэйсик вродебы не смотря на свою простоту умеет сразу в байт код проца компилировать. Тоесть универсальную ехе компанует сразу. Но универсальную - это ещё как сказать.... Ведь если её на не совместимой платформе пытаться запускать она же глючеть по идее будет?! ПРограммирпование на Языке маш кодов, дело очень тонкое. И узкоспециализированное. Объясняю почему "узкоспециализированное". Потому что необходимо сразу несколько концепций для себя определить , перед тем чтобы хотябы решить! Учить ли язык машинных кодов или нет... Потому что с дуру, можно начать осваивать язык кодов допотопный процов, таких машин как какойнибудь "рекорд 65" (шутка).А в результате наломать шишек, и очнутся, "блин надо было для интеловской базы подбирать учебники". Например сейчас при 32х разрядной системе. итспользуются в асемблере такие лигатуры как EAX EBX а теже лигатуры для 16х выглядили вроде как АХ ВХ. Я долго изучал системы маш кодирования. Очень интересовался, напрмиер сейчас с ходу могу сказать что функция прерывания инт 19 ш (лень переключать яз) . В шестнадц коде выглядит как CD20 кажется. Тоесть ненадо ассемблер там к приемру искать среду отладки какуюнибудь для асемблирования. Просто HEX редактор любой запускаете и пишите туда (в раздел я чеек) СD20, затем сохраняете в ехе. ну или ком. Запускаетет и всё! ПРоц выполнит прерывание. Также и с кемто из пользователем заявленным HEX кодом программы "здравствуй мир" . Коды все эти "BB 11 01" и т.д вбиваете в hex редактор. Только без пробелов!! Затем save затем запуск. Появляется окошко с фразой. Данный хекс код имеет вполне явную семантику кстати. Первые три каракуля всей этой 20ти значной кодировки означают кажется слово "МОv Bx, 111X".Njtсть смещение строчки кладётся в Б ИКС. Так вот... Впринципе и всё. Давайте вместе подумаем над этими командами пишите в аську. Я кстати кучу софта всякого написал на паске. Например программки для выдёргивания изОГРОМНЕЙШИХ листингов асемблерных кодов, спец теги. Которые другой под программой записываются в лист и создаётся букварь маш кодов. Который ксттаи в дальнейшем можно использовать при разработке своего собственного компилятора!

дилетант

Я не программист, однако

Я не программист, однако поверхностное знакомство с с предметом позволяет сделать предположение о том, что:
1. Вопрос, задаваемый Вами не совсем в тематике форума.
2. Настойчивость, проявленная Вами в выяснении вопроса "как написать единицы и нолики, чтобы процессор меня понял и выполнил", достойна уважения, но только _настойчивость_. Так как только "сферический процессор в ваккууме" интерпретирует на входе единички и нолики.
Отсюда мне хочется сделать вывод: "стремление к знаниям без применения здравого смысла порождает безобразие".

emerge Your world
Gentoogle

+1 Топикстартеру бы

+1
Топикстартеру бы поиграться на чем-нибудь попроще, чем x86. Например, на AVR.

ЗЫЖ Прошу прощения, что встрял.

eegorov

eegorov написал(а):
+1
Топикстартеру бы поиграться на чем-нибудь попроще, чем x86. Например, на AVR.

Увы, нет. Начинать с изучения архитектур(ы), режимов работы процессоров, классической теории компиляторов etc.
А так...
Учиться и не размышлять - напрасно терять время, размышлять и не учиться - губительно. ©
Конфуций. 论语

eegorov написал(а):
ЗЫЖ Прошу прощения, что встрял.

p.s. просто проходил мимо.

Я только за. Только вот,

Я только за. Только вот, похоже, не все хотят

Цитата:
Начинать с изучения архитектур(ы)

Настройки просмотра комментариев

Выберите нужный метод показа комментариев и нажмите "Сохранить установки".