如何将ASCII码16表示为一个字符?

问题描述 投票:0回答:1

【C语言】

“ASCII码16由控制字符表示␐也称为数据链接转义”

我想从键盘上获取这个字符作为程序的输入,该程序允许您进行缓冲区溢出。仅当我用以下值覆盖 INT 变量时它才有效:1161258512。

我不知道如何构建这个数字,因为不可能将单个字符 16 写为输入。我也尝试过转义序列,但没有成功。也许我应该使用 unicode 来做到这一点,并写入 4 字节有效负载的前 2 个字符(包括 16 个字符)。

我对此类事情很陌生,所以如果您了解更多,我将非常感激

c memory-leaks buffer-overflow payload
1个回答
0
投票

不可能将单个字符 16 作为输入写入

这是一个奇怪的表达方式。如您所知,DLE 是 0x10, 16。

如何从键盘获取此信息取决于许多您没有透露的事情:什么操作系统?

输入上的控制键

在键入按键时按下 Control 的效果是屏蔽位 5 和 6,即值 32 和 64,所以这就是您的答案:

您可以使用 Ctrl+P、Ctrl+p 或 Ctrl+0,因为有 3 个可能的值:

  • 0
    是 0x30
  • P
    是 0x50
  • P
    是 0x70

但是要阅读本文,您需要准备键盘驱动程序。在 Linux 和家庭 pos-Unix 下使用 raw input 并在 Windows 下调用 ReadConsoleInput 或类似的。

简而言之,您保存输入配置,准备一些适合您需要的配置,例如禁用回显和缓冲,然后读取关键代码。最后你恢复了一切。

Microsoft 有一个

控制台参考。 Linux下man

是你的朋友。寻找 
raw io
ioctl

    

© www.soinside.com 2019 - 2024. All rights reserved.