# #c #exception #assembly #x86
Вопрос:
Я немного сбит с толку относительно того, что мне нужно исправить, чтобы обработать исключение ошибки, возникшее при 0x00AFF748 в ProjectTwo.exe: 0xC0000005: Нарушение доступа, выполняющее местоположение 0x00AFF748.
Я пытаюсь написать внешнюю программу на языке ассемблера, которая затем вызывается программой на C . Я не уверен, что перепутал код на ассемблере, и именно поэтому я продолжаю получать ошибку. Цель моей программы —
int problem1_ ( ) { int numberArray [4] = {1, -3, 12, 15}; int result = 0, index = 0; int numElements = 4; while (index lt; numElements) { if ( index gt;= 1 amp;amp; numberArray[index] gt; 2 ) { result = result * numberArray[index] ; } else { result = result - 5; } index ; } return result; }
Мой код на C :
#includelt;iostreamgt; using namespace std; extern "C" int problem1_(); int main() { //Declare the variable and set it to returned result //From calling the assembly program int x = problem1_(); //Print the results cout lt;lt; "The result is: "lt;lt; x lt;lt; endl; return 0; }
Мой код на ассемблере:
.model flat, c .data numberArray DWORD 1, -3, 12, 15 numElements DWORD 5 .code problem1_ proc mov eax, 0 ;value of eax is 0 lea ebx, numberArray ;Load the array's memory address into register ebx' mov ecx, numElements ;ecx is count down counter cmp ecx, 0 ;If ecx not greater than 0, jump to quit jng FINISH iterateThruArray: cmp[ebx], eax ;Compare value at current index to eax jl result1 jmp result2 result1: mul numberArray jmp FINISH result2: sub eax, 5 jmp FINISH FINISH: pop ebp ; pop ebp from the stack ret ; return to calling program problem1_ endp end
Комментарии:
1. Как вы устраняете нарушение доступа? Только не нарушайте доступ. Очень вероятная вероятность-это доступ к массиву за его пределами. Поэтому сначала отладьте свой код, чтобы убедиться, что вы этого не делаете.
2. Фактический AV, вероятно, вызван звонком
pop ebp
, который никогда не выполнялсяpush
. Но здесь так много других проблем, что я едва знаю, с чего начать. Но @TheUndeadFish прав в том, что вы захотите запустить это через отладчик. По крайней мере, это может привести к лучшим вопросам.