pour info, le code avec le pointeur, compilé avec gcc et l’option -s donne ceci en sortie :
.file "main.c"
.text
.section .rodata
.LC0:
.string "Hello"
.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
movq $.LC0, -8(%rbp)
movq -8(%rbp), %rax
addq $1, %rax
movb $97, (%rax)
movl $0, %eax
popq %rbp
.cfi_def_cfa 7, 8
ret
.cfi_endproc
.LFE0:
.size main, .-main
.ident "GCC: (GNU) 7.3.1 20180712 (Red Hat 7.3.1-6)"
.section .note.GNU-stack,"",@progbits
On voit bien le .string "Hello"
dans la section .rodata
, donc accessible en lecture seule.
Quant au code avec tableau, il donne ça avec l’option -s de gcc :
.file "main_t.c"
.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
movl $1819043144, -6(%rbp)
movw $111, -2(%rbp)
movb $97, -5(%rbp)
movl $0, %eax
popq %rbp
.cfi_def_cfa 7, 8
ret
.cfi_endproc
.LFE0:
.size main, .-main
.ident "GCC: (GNU) 7.3.1 20180712 (Red Hat 7.3.1-6)"
.section .note.GNU-stack,"",@progbits
Dans ce cas, on voit bien l’affectation de chaque lettre de la chaine de caractère dans la partie ".text", qui peut donc être modifiée
movl $1819043144, -6(%rbp)
movw $111, -2(%rbp)
movb $97, -5(%rbp)