Соответствует ли ошибка Segmentation fault в C исключению AccessViolationException в C#?
Обе ошибки - о промахе в памяти. Правильно ли понимаю, что они одинаковы по причинам?
Ответы (1 шт):
Автор решения: Eugene X
→ Ссылка
И да, и нет. Оба указывают на то что ты вышел за пределы разрешённой памяти. Но так как C# сам управляет памятью переменных, то по сути нечего плохого произойти не может. А SementationFault означает что ты вышел за пределы памяти и натворил бед. Думаю стоит обратится к ASM что-бы понять произошедшее.
section .data
msg db "Hello, World!"
section .text
global _start
_start:
mov rax, 1
mov rdi, 1
mov rsi, msg
mov rdx, 13
syscall
mov rax, 60
mov rdi, 0
syscall
Тут становится очевидным что когда ты выходишь за пределы секции .data, то на прямую попадаешь в секцию с кодом, и ломаешь уже ее. Что физически невозможно, потому что это RO память приложения и программа понимает что пора падать, пока не началось месиво из инструкций.