Turn c into assembly
Overview
Turn c
code into assembly language with gcc
.
Details
Create a hello.c
file with the following contents or any other c
program to convert into assembly
language:
#include <stdio.h>
void main () {
printf("Hello world!\n");
}
Generate the assembly
output:
jemurray@shell:~$ gcc -S hello.c
jemurray@shell:~$ ls -al hell*
-rw-r--r-- 1 jemurray jemurray 64 Mar 9 19:59 hello.c
-rw-r--r-- 1 jemurray jemurray 438 Mar 9 19:59 hello.s
Examine the assembly
code:
jemurray@shell:~$ cat hello.s
.file "hello.c"
.text
.section .rodata
.LC0:
.string "Hello world!"
.text
.globl main
.type main, @function
main:
.LFB0:
.cfi_startproc
pushq %rbp
.cfi_def_cfa_offset 16
.cfi_offset 6, -16
movq %rsp, %rbp
.cfi_def_cfa_register 6
leaq .LC0(%rip), %rdi
call puts@PLT
nop
popq %rbp
.cfi_def_cfa 7, 8
ret
.cfi_endproc
.LFE0:
.size main, .-main
.ident "GCC: (Debian 8.3.0-6) 8.3.0"
.section .note.GNU-stack,"",@progbits
Why would non-low level programmers care? Because it’s interesting to understand the dark magic wizards use to speak with the processors or at least as close as us mere mortals can understand. But seriously, most people would not write assembly
code like gcc
generates. However, it is still fun to see the individual instruction opcodes
the processor executes to print a single line of text.