#listview #assembly #segmentation-fault
#listview #сборка #ошибка сегментации
Вопрос:
Я написал этот код (скопируйте здесь как список, для оформления):
1 global _start
2 section .data
3 Foos:
4 00000000 B902000000 mov ecx, 2
5 00000005 BA00000000 mov edx, 0
6 0000000A 42 L: inc edx
7 0000000B 83E901 sub ecx, 1
8 0000000E 0F94C0 setz al
9 00000011 D0E0 shl al, 1
10 00000013 A2[19000000] mov byte [L1 1], al
11 00000018 EBF0 L1: jmp L
12 0000001A EBEE jmp L
13 0000001C A2[22000000] mov byte [L2 1], al
14 00000021 EBFE L2: jmp L2
15 00000023 EBFC jmp L2
16 00000025 89D0 mov eax, edx
17 00000027 C3 ret
18 _start:
19 00000028 E8D3FFFFFF call Foos
20
21 0000002D B801000000 mov eax, 1
22 00000032 BB00000000 mov ebx, 0
23 00000037 CD80 int 0x80
Если я выполню этот код как есть, процесс завершится по мере необходимости, и eax будет содержать 2 после возврата из Foos.
Но, если я выполню этот код, заменив «section .data» на «section .text», я получу ошибку сегментации. Почему это незначительное изменение приводит к сбою программы?
Комментарии:
1. Потому
.text
что раздел обычно недоступен для записи.2. Спасибо. Я не знал этого факта…