dirent结构

struct dirent
{   long d_ino; /* inode number 索引节点号 */  off_t d_off; /* offset to this dirent 在目录文件中的偏移 */  unsigned short d_reclen; /* length of this d_name 文件名长 */  unsigned char d_type; /* the type of d_name 文件类型 */  char d_name [NAME_MAX+1]; /* file name (null-terminated) 文件名,最长255字符 */
} 

ARM64下dirent内存

0x10f85b640: 0xd6 0x50 0x00 0x00 0x00 0x00 0x00 0x00
0x10f85b648: 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
0x10f85b650: 0x40 0x00 0x21 0x00 0x08 0x50 0x2d 0x70
0x10f85b658: 0x69 0x6e 0x6f 0x74 0x6e 0x6f 0x69 0x72
0x10f85b660: 0x5f 0x4d 0x2d 0x53 0x54 0x42 0x4c 0x5f
0x10f85b668: 0x56 0x2d 0x6d 0x5f 0x5f 0x6d 0x2d 0x32
0x10f85b670: 0x2e 0x35 0x2e 0x74 0x78 0x74 0x00 0x00
0x10f85b678: 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00

偏移0x12的位置:0x21,是文件名的长度d_namlen。

偏移0x14的位置:0x08,是文件的类型d_type

偏移0x15的位置开始,长度0x21,是文件名的首地址。

这里文件名是:P-pinotnoir_M-STBL_V-m__m-2.5.txt

文件名后缀匹配

需要匹配的文件名后缀是:.trx,HEX形式:2E747278

转换成小端模式下的4字节uint结果是:0x7872742E

现有汇编代码如下:

__text:000000010361E100                 ADD             X8, X23, X19
__text:000000010361E104                 LDUR            W8, [X8,#0x11]
__text:000000010361E108                 CMP             W8, W27

其中X23是dirent的初始地址:0x10f85b640

X19读取到的文件名长度:0x21

W27是待匹配文件后缀.trx在小端模式下的uint:0x7872742E。

这里0x11 = 0x15 - 4,其中4是匹配的后缀.trx的长度。

读到的W8,就是实际的文件名的后4个字节.txt

然后和W27匹配,也就是比较文件名后缀。

举一反三

假如要匹配后缀.db(此时长度只有3,而uint有4个字节),先将其转换成小端uint:0x62642E

然后同样LDUR W8,[X8, #0x11](为什么不是#0x12呢?),

再将其右移8位,LSR W8, W8, #8,

再和存储了0x62642E的W27进行CMP,应该就没问题了。

这里只是想象的代码,没有实际测试,如果错了请告诉我

Orz

参考

dirent结构

readdir函数

ARM64内存中的dirent,记一个判断文件后缀的方式相关推荐

  1. 【学习日志】2022.09.02 (C++)strcmp和stricmp、strcmpi三者之间的区别、C语言判断文件后缀名、ZENO Audio Update、TEN MINUTES PHYSICS

    (C++)strcmp和stricmp.strcmpi三者之间的区别 (strcmpi在Windows C标准库实现,但不在GNU C标准库实现) #include <string.h> ...

  2. 【delphi】判断文件的编码方式(ANSI、Unicode、UTF8、UnicodeBIG)

    在开发中,经常会碰到文件编码格式不正确,有时也需要进行编码转换,具体的编码原理可以自行查找,这里记录下我的处理方式.根据这个原理稍加修改即可实现编码转换和自动判断. {判断文件的编码方式,可以实现编码 ...

  3. c语言文件后缀名怎么隐藏起来,win10中怎样查看被隐藏的文件后缀名 win10显示文件后缀名的设置方法...

    win10是一款不错的操作系统,但是有很多刚装的用户有很多疑问,那么win10中怎样查看被隐藏的文件后缀名?下面小编带来win10显示文件后缀名的设置方法,希望对大家有所帮助. win10显示文件后缀 ...

  4. js下载文件并修改文件名 / js判断文件后缀

    js下载文件并修改文件名 / js判断文件后缀 代码如下(示例): //handlerName:文件名 filePath:下载路径downloadFile (handlerName, filePath ...

  5. linux if 判断文件,shell中的逻辑判断,if 判断文件、目录属性,if判断的一些特殊用法...

    格式1:if 条件 ; then 语句; fi //如果满足条件,然后执行语句 [root@akuilinux01 shell]# cat if1.sh #!/bin/bash a=5 if [ $a ...

  6. C++中的_access函数(判断文件是否存在)

    C++中的_access函数 2018年08月21日 13:33:04 monk1992 阅读数 5402 今天读代码看到一个access函数,当时没明白怎么回事.man了一下才知道该函数主要用于文件 ...

  7. RT-Thread中如何预编译一个.c文件

    本文介绍在RT-Thread系统,使用scons,如何预编译一个.c文件 首先新建一个测试文件test.c #include "rtthread.h"void test(void) ...

  8. python判断文件后缀_Python 判断文件后缀是否被篡改

    自己用Python写了个对文件后缀判断的脚本, 目前支持的文件类型还不是很多,还有待完善. 支持Microsoft Office (.pptx .docx .xlsx) Pyhton版本为3.6 #! ...

  9. 前端判断文件后缀名_JS 获取文件后缀,判断文件类型(比如是否为图片格式)

    1.获取文件后缀H3I免费资源网 有时候我们需要通过文件名或者路径,得到该文件的后缀名(扩展名),可以通过如下方式进行截取:H3I免费资源网 //文件路径 var filePath = "f ...

最新文章

  1. Chrome 技术篇-json查看,json格式化,JSONView插件
  2. 实现库函数strcpy
  3. React-生命周期杂记 1
  4. 微软在线office online 使用时遇到的一些问题
  5. php 去掉字符串的最后一个字符
  6. kali linux之选择和修改exp与windows后渗透
  7. IE8 默认以Web Standards模式显示网页 全面遵循Web标准
  8. 小米3c路由器拆机_小米AC2350无线路由器拆机-路由器交流
  9. 使用GAT解析Minidump(图形界面)
  10. 计算机网络四个阶段的主要特征,1计算机的四个发展阶段的主要特征
  11. 高分子物理考研概念及要点、考点总结
  12. I want to be a teacher when I grow up ——长大后我想当老师
  13. 东华OJ第85题 计算多项式的值
  14. 3D中的OBJ文件格式详解(转)
  15. UI设计中的App标签栏中的设计细节
  16. maven项目中导入mysql中的jdbc驱动时,有以下错误出现,说明你需要更换驱动包版本
  17. 【iOS-知乎日报第二周总结】
  18. 有趣的物联网项目合集
  19. 《Deep residual shrinkage networks for fault diagnosis》 基于深度残差收缩网络的故障诊断(翻译与python代码)
  20. treeselect 清空销毁树_antd———Tree结构之探索遍历及删除

热门文章

  1. 制作可随身带的系统——Windows10在U盘运行 Rufus快速烧录镜像
  2. 【附源码】计算机毕业设计SSM线上文具销售系统
  3. 深度学习系列之Gaussian_YOLOv3 个人总结
  4. h t fad fdads
  5. 服务器好友系统开发,《神话》好友系统介绍 同服务器可成为好友
  6. 【Java】JUnit 4.13.2 警告 ‘assertEquals(double, double)‘ is deprecated 的解决方法
  7. 抖音开发对接之订单取消消息
  8. python中的(类和对象)1.5万字学习笔记
  9. SAP:QP01,QP02对应BAPI处理
  10. Unity技术手册 - 创建物体有几种方式?