Я изучаю 32-битную сборку, и мне нужна помощь с кодом. Я пытаюсь поместить 4 в таблицу с индексом 3, который передается аргументами в assebly-код.Ошибка сегментации - по какой причине
.code32
.equ KERNEL, 0x80 # Linux system functions entry
.equ WRITE, 0x04 # write data to file function
.equ EXIT, 0x01 # exit program function
.equ STDOUT, 1
.equ argTab, 8
.equ argLicz, 12
.equ argN, 16
.equ argZakres, 20
.text
.globl przelicz
.type przelicz, @function
przelicz:
pushl %ebp
movl %esp, %ebp
movl $2, %ecx
movl $4, %ebx
movl argTab(%ebp), %edx
movl %ebx, (%edx,%ecx,4)
movl %ebp, %esp
popl %ebp
ret
я исполню ее с кодом C:
#include <stdio.h>
int main(){
const static int n = 5;
int tab[n];
int a;
for(a = 0; a < n; ++a){
tab[a] = a;
}
int licz[n];
przelicz(tab, licz, 50, 50);
for(a = 0; a < n; ++a){
//printf("%d ", licz[a]);
}
}
Когда я запускаю его я получаю сообщение об ошибке: ошибки сегментации (код сбрасывается). Я читал, что я пытаюсь получить доступ к памяти, которая не существует. Как я могу это решить?
Вы проверили, что код скомпилирован как 32-битный процесс? это имеет большое значение в этом случае – tay10r
вы попробовали пошаговое отладчик? – Elazar
@ Тейлор Флорес - В этом была проблема. Спасибо! –