文件读取在gdb中是什么样子的

文件读取在gdb中是什么样子的,gdb,reverse-engineering,Gdb,Reverse Engineering,当一个程序从一个文件中读取时,这在GDB中是什么样子的。我知道该文件已被打开等 还有这样的事情: call fopen ... call fread ... call fclose 但是你能解释一下“将字节从文件复制到程序内存”的操作吗?也许以装配为例。 其中寄存器是存储文件内容的文件/程序存储器的地址。 fopen返回一个句柄。我怎样才能跟踪它呢?好吧,看来你想学习组装。Fopen返回文件的句柄。当您调用Fopen和许多其他函数时,返回值将放在EAX寄存器中,但这也取决于硬件。所以,如果您想

当一个程序从一个文件中读取时,这在GDB中是什么样子的。我知道该文件已被打开等

还有这样的事情:

call fopen
...
call fread
...
call fclose
但是你能解释一下“将字节从文件复制到程序内存”的操作吗?也许以装配为例。 其中寄存器是存储文件内容的文件/程序存储器的地址。
fopen返回一个句柄。我怎样才能跟踪它呢?

好吧,看来你想学习组装。Fopen返回文件的句柄。当您调用Fopen和许多其他函数时,返回值将放在EAX寄存器中,但这也取决于硬件。所以,如果您想跟踪文件的句柄,在ASM中调用fopen后,您应该从EAX寄存器获取它。如果你对更多细节感兴趣,你应该查阅一些组装教程或书籍。例如

好吧,看起来你想学习组装。Fopen返回文件的句柄。当您调用Fopen和许多其他函数时,返回值将放在EAX寄存器中,但这也取决于硬件。所以,如果您想跟踪文件的句柄,在ASM中调用fopen后,您应该从EAX寄存器获取它。如果你对更多细节感兴趣,你应该查阅一些组装教程或书籍。例如

您只需编写一个小型的
C
程序,就可以轻松地检查这一点:

#包括
int main(){
字符c;
文件*f=fopen(“hello.txt”、“r”);
c=fgetc(f);
fclose(f);
返回0;
}
然后用一个到输出程序集的开关编译它,对于gcc:
gcc-S-O0 hello.c
-S
告诉gcc到输出程序集,
-O0
禁用优化器)。 然后查看
hello.s
,您将看到为此代码生成的程序集:

。。。
subq$16,%rsp
movl$.LC0,%esi
movl$.LC1,%edi
打电话给fopen
movq%rax,-8(%rbp)
movq-8(%rbp),%rax
movq%rax,%rdi
打电话给fgetc

movb%al,-9(%rbp)您只需编写一个小型
C
程序即可轻松检查:

#包括
int main(){
字符c;
文件*f=fopen(“hello.txt”、“r”);
c=fgetc(f);
fclose(f);
返回0;
}
然后用一个到输出程序集的开关编译它,对于gcc:
gcc-S-O0 hello.c
-S
告诉gcc到输出程序集,
-O0
禁用优化器)。 然后查看
hello.s
,您将看到为此代码生成的程序集:

。。。
subq$16,%rsp
movl$.LC0,%esi
movl$.LC1,%edi
打电话给fopen
movq%rax,-8(%rbp)
movq-8(%rbp),%rax
movq%rax,%rdi
打电话给fgetc
movb%al,-9(%rbp)