![](/img/trans.png)
[英]“Syscall param open(mode) contains uninitialised byte(s)” in open sys call
[英]open syscall mode argument number confusion
在x64,ubuntu 20機器上,我寫了一個簡單的C程序
#include<stdio.h>
#include<fcntl.h>
int main()
{
// assume that foo.txt is already created
int fd1 = open("foo.txt", O_CREAT | O_RDONLY, 0770);
close(fd1);
exit(0);
}
我試圖了解 0770 文件模式參數生成的十六進制值。 所以我 objdump 二進制文件並得到以下內容:
0000000000001189 <main>:
1189: f3 0f 1e fa endbr64
118d: 55 push rbp
118e: 48 89 e5 mov rbp,rsp
1191: 48 83 ec 10 sub rsp,0x10
1195: ba f8 01 00 00 mov edx,0x1f8
119a: be 40 00 00 00 mov esi,0x40
119f: 48 8d 3d 5e 0e 00 00 lea rdi,[rip+0xe5e] # 2004 <_IO_stdin_used+0x4>
11a6: b8 00 00 00 00 mov eax,0x0
11ab: e8 d0 fe ff ff call 1080 <open@plt>
很明顯,0x1f8 是模式參數。 但是,它對應於十進制的 504。
0770 如何轉換為 504(或十六進制的 0x1f8)?
0770是怎么轉成504的
就像您要轉換任何其他八進制數一樣,將每個數字乘以其相應的 8 次冪:
0770(8) = 7 * 8^2 + 7 * 8^1 + 0 * 8^0 = 7*64 + 7*8 = 504(10)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.