Ahojte,
mám súbor písaný v jazyku C, ktorý obsahuje funkciu:
void set_Assertion(int BID, int ID) {
printf("ID: %d BID: %d\n",ID,BID);
return;
}
ďalej mám asemblerovský kód, z ktorého časť je:
_main:
LFB9:
.cfi_startproc
pushl %ebp
.cfi_def_cfa_offset 8
.cfi_offset 5, -8
movl %esp, %ebp
.cfi_def_cfa_register 5
andl $-16, %esp
movl $200032, %eax
call ___chkstk_ms
subl %eax, %esp
call ___main
movl $0, 200028(%esp)
jmp L9
L10:
call _rand
movl %eax, %ecx
movl $351843721, %edx
movl %ecx, %eax
imull %edx
sarl $12, %edx
movl %ecx, %eax
sarl $31, %eax
subl %eax, %edx
movl %edx, %eax
imull $50000, %eax, %eax
subl %eax, %ecx
movl %ecx, %eax
movl 200028(%esp), %edx
movl %eax, 28(%esp,%edx,4)
addl $1, 200028(%esp)
L9:
movl $6, ID
movl $4, BID
pushl ID
pushl BID
call _set_Assertion
popl BID
popl ID
cmpl $49999, 200028(%esp)
jle L10
movl $50000, 8(%esp)
movl $0, 4(%esp)
leal 28(%esp), %eax
movl %eax, (%esp)
call _quicksort
nop
leave
.cfi_restore 5
.cfi_def_cfa 4, 4
ret
.cfi_endproc
pričom inštrukcie za návestím L9
movl $6, ID
movl $4, BID
pushl ID
pushl BID
call _set_Assertion
popl BID
popl ID
som pridal do programu manuálne.
ásledne tieto dva súbory zlinkujem a spustím ale pri zavolaní funkcie call _set_Assertion sa spustí nekonečný cyklus a vypisuje stále tie isté hodnoty dookola. Vedeli by ste mi poradiť? Myslím si ,že tam bude problém niekde s registrami, že je možné, že niektoré prepíšem len akosi sa mi nedarí na to prísť
Skúšal som si pomocou pusha uložiť všetky základné registre do stacku a potom ich pomocou popa vytiahnuť ale nepomohlo to. Skúšal som aj prerušenie pomocou int $0x80 ale ani to mi nepomohlo.
Za každú radu budem vďačný.