OllyDbg - 读取文件 API
逆向工程
ollydbg
2021-07-01 18:49:54
2个回答
- 什么是
-> 0
?在pBytesRead和Buffer 中,符号->
以0
和出现00
。这意味着什么?
OllyDbg想帮助你,并为你提供一个额外的信息—— “给定地址当前有什么?”
address -> something
表示在address
当前something
— 请参阅以下内存转储图片。
(在 C 语言的说法中,地址是指向内存的指针:“地址指向内存中的某物”,因此您可以读->
作“指向”。)
pBytesRead = reverseMe.402173 -> 0
表示地址402173
是当前0
,Buffer = reverseMe.40211A -> 00
表示 at 地址40211A
当前为00
。
但是为什么0
在第一种情况下,00
在第二种情况下呢?
因为 - 再次 - OllyDbg想帮助你。它足够聪明,可以正确解释记忆内容的含义——在给定的上下文中——对于你,一个人类:
在第一种情况 (
pBytesRead
) 中,预期数据是一个数字,因此它将双字(4 个连续字节;文档中的 LPDWORD 表示指向双字的长指针)转换为十进制数(0
在您的情况下):在第二种情况 (
Buffer
) 中,预期数据是一个字节(例如一个字符),因此如果可能,它会将其显示为ASCII 字符(例如'p'
),否则显示为2 个十六进制数字(00
在您的情况下):
- Size (Number of Bytes to Read) = 70 是什么意思?这是否意味着程序应该读取
70
十进制?
是的 - 更准确地说,最多(最多) 70 个字节。
您可以在MSDN上找到有关ReadFile函数的更多信息。
来自MSDN的函数签名:
BOOL ReadFile(
HANDLE hFile,
LPVOID lpBuffer,
DWORD nNumberOfBytesToRead,
LPDWORD lpNumberOfBytesRead,
LPOVERLAPPED lpOverlapped
);
如果你同意我的看法,那么函数是如何被调用的:
ReadFile(EAX, OFFSET 0x0040211A, 0x46, OFFSET 0x00402173, 0);
这里0x46
(一个十六进制数)放在nNumberOfBytesToRead参数上,我们将读取70
(十进制)字符。
- hfile - 文件的句柄,在这种情况下,它是从CreateFileA之前分配的。
其它你可能感兴趣的问题