我一直在Ghidra中摆弄一个程序,我遇到了这四行代码.我发现了一些关于CONCAT11的东西,它表示两个单字节操作数之间的连接,但我不理解输入user_input._2_1_(undefined)user_input的哪部分表示.

C:中的代码

  read(0,&user_input,5);
  uVar1 = user_input;
  uVar2 = user_input._1_1_;
  local_16._0_2_ = CONCAT11(user_input._2_1_,(undefined)user_input);

推荐答案

100

对字节xy执行( ((uint16_t)x) << 8 ) | (uint8_t)y.


100

user_input是一个变量.你可以对它使用.运算符,这一事实使它成为某种 struct ._2_1_将是它的一个油田.显然,这是一个生成的名字.我假设这两个数字是一个偏移量和一个大小.因此,它将是在 struct 的第三个字节找到的一个字节的字段.


100

我不认为这是有效的代码.

我们知道将为CONCAT11提供一个字节.因此(undefined)user_input必须引用读取字节的操作.该字节必须肯定是user_input的第一个字节.因此,这将使它成为user_input._0_1_的参考.

嗯,它可能是多字节字段(*(char*)&user_input._0_?_)的第一个字节,但这似乎不太可能.

我认为使用(undefined)是因为缺乏解决这种模棱两可的问题所需的信息.


这一切都是猜测.

C++相关问答推荐

当包含头文件时,gcc会发出隐式函数声明警告

使用SWI—Prolog的qsave_program生成二进制文件有什么好处?'

为什么在此程序中必须使用Volatile关键字?

创建一个fork导致fget无限地重新读取文件

Win32API Wizzard97 PropSheet_SetWizButton不工作

轮询libusb_pollfd struct 列表的正确方式是什么?

在C++中访问双指针

有什么方法可以将字符串与我们 Select 的子字符串分开吗?喜欢:SIN(LOG(10))

无法在OpenGL上绘制三角形

在C中包装两个数组?

当内存来自Malloc时,将char*转换为另一个指针类型是否违反了严格的别名规则?

为什么realloc函数在此代码中修改变量?

为什么电路板被循环删除?

对于STM32微控制器,全局偏移表.get和.Got.plt必须为零初始化

用C++高效解析HTTP请求的方法

在文件描述符上设置FD_CLOEXEC与将其传递给POSIX_SPOWN_FILE_ACTIONS_ADCLOSE有区别吗?

struct 中的qsort,但排序后的 struct 很乱

从管道读取数据时丢失

在 C23 之前如何对空指针使用nullptr?

C 预处理器中的标记分隔符列表