如何通过整数获取标志的含义

逆向工程 编译器
2021-07-04 10:33:18

假设我有一个到open.

man 2 open 给我信息,它需要 2 或 3 个参数

int open(const char *pathname, int flags);
int open(const char *pathname, int flags, mode_t mode);

所以,我的代码运行并且在我的寄存器中我有

$rdi = 0x00007fffffffdb40 → "/etc/init.d/",
$rsi = 0x0000000000000241,
$rdx = 0x00000000000001c9

它在通话期间如何使用以及使用哪些标志?如何打开目录(或文件)?

  1. 我正在查看手册页。提到了可能的标志,但没有通过|在源代码中将标志放在一起来设置它们的位/值/整数
  2. 我继续查看手册页并查看上面定义常量的头文件。在这种情况下,我需要#include <sys/types.h> <sys/stat.h> <fcntl.h>. 但是,在这个文件中,我找不到位或整数,这些sum|高达给定的标志($rsi = 0x241577十进制,1001000001二进制)我看不到任何模式。

问题:我监督某事吗?我需要去别的地方看看吗?这些位在哪里描述?

1个回答

标志是从这里提取的常量:https : //github.com/torvalds/linux/blob/master/tools/include/uapi/asm-generic/fcntl.h

他们可以改变,但很少。


应用这个我们可以看到

0x241 == O_WRONLY | O_CREAT | O_TRUNC