我正在尝试将二进制文件加载到程序集并将其存储在寄存器中。 这是我加载文件的C ++代码。
extern "C" int turtle(unsigned char *commands, unsigned int commands_size);
int main(void)
{
FILE *fptr1;
fptr1 = fopen("./input.bin", "rb+");
fseek(fptr1, 0, SEEK_END);
unsigned int length1 = ftell(fptr1);
fseek(fptr1, 0, SEEK_SET);
unsigned char * buffer1 = (unsigned char*)malloc(length1 + 1);
if (buffer1)
{
fread(buffer1, 1, length1, fptr1);
}
int result = turtle(buffer1, length1);
printf("Returned value: %i ", result);
fclose(fptr1);
return 0;
}
这是我在汇编中执行的操作,以检查在未签名的char * commands上加载第一个元素的值的寄存器的值。如果该值为1,则打印的命令数为1;如果edx上的值不为1,则它将输出0。我的二进制文件的值为:
section .text
global _turtle
_turtle:
push ebp
mov ebp, esp
mov eax, ecx
mov eax, [ebp + 8]
mov edx, [eax] ; 0 element
mov ecx, edx
cmp edx, 1
je set1
set2:
mov ecx, [ebp + 12]
mov eax, ecx ;eax to ecx
pop ebp
ret
set1:
mov eax, edx ;eax to ecx
pop ebp
ret
该整数值似乎已正确加载,但是命令(字符)不起作用。我在做什么错了?