在汇编中读取二进制文件

时间:2019-01-19 23:16:40

标签: assembly x86 nasm

我正在尝试将二进制文件加载到程序集并将其存储在寄存器中。 这是我加载文件的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。我的二进制文件的值为:

  

00000001   enter image description here

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

该整数值​​似乎已正确加载,但是命令(字符)不起作用。我在做什么错了?

0 个答案:

没有答案