【发布时间】:2015-07-25 15:46:50
【问题描述】:
我正在尝试用 C 语言制作一个简单的键盘记录器。所以我决定使用远指针来访问键盘缓冲区。(32 字节,地址 - 0x41E)。我只是将该地址分配给远指针并尝试访问缓冲区。但我输入的代码只显示这 3 个字符 - 笑脸、@ 和很多空格。这是我的代码 -
#include<stdio.h>
#include<conio.h>
int main()
{
char far *s,*p,*m;
char arr[32];
s=(char far*)0x0041E;
m=(char far*)0x0041E;
p=(char far*)0x0043D;
while(!kbhit())
{
m=s;
while(m<=p)
{
printf(" %c",*m);
m++;
}
}
return 0;
}
键盘缓冲区地址的链接-(最近的一点参考:-)) http://wiki.osdev.org/Memory_Map_(x86) http://computer.forensikblog.de/en/2009/04/reading-passwords-from-the-keyboard-buffer.html
【问题讨论】:
-
“远指针”?
<conio.h>?这是什么操作系统? -
有什么理由使用远指针?
-
@melpomene:我目前使用的是 Windows-7,但 keybuffer 的地址不依赖于操作系统。我们需要包含
以使用 kbhit()。它在 gcc 中不存在不过! -
什么是“keybuffer”?另外,什么是远指针?
-
您应该了解现代操作系统设计、驱动程序、虚拟内存和内存保护,以及未定义的行为。更别提硬件架构了,USB、DOS、BIOS、UEFI等等。