#archlinux-cn-offtopic
!sHfvsJejodKvXevZ5DIO_XTCyV0ElW1n6NOR__tH7Pc
23,333 messages · Page 195 of 234
> <@telegram_241995008:nichi.co> https://jameshfisher.com/2018/02/20/c-inline-assembly-hello-world/
也就是说,我在C语言写了个read函数,他会调用libc的read,但这个read关键部分是用汇编写的 ,只有汇编才能syscall
static inline long __syscall0(long n)
syscall 感觉就是切换到特权指令
asm("syscall");
最后一句话就是为了这个吧
肯定要啊。。
都不一样吧
x86 32位是压栈
在其他架構的調用方法會不同嗎
发起syscall现在都不用切进内核空间了嘛(我的记忆缺失了
x86 32位上应该还在用中断。。
我怎么感觉美国运动员,在九龙科技下的加持下会是第一
嗯 输入输出的寄存器名肯定不一样
调用方式不一样
虽然 syscall 号码是一样的
上面的代码依赖x86的调用约定
C语言发明出来就可以让不同架构共享一套代码
感觉肯定是要封装一层的,不然每个架构代码都不一样了
[m.image] image.jpeg
这玩意才是直接调用syscall的
int main(void) {
register int syscall_no asm("rax") = 1;
register int arg1 asm("rdi") = 1;
register char* arg2 asm("rsi") = "hello, world!\n";
register int arg3 asm("rdx") = 14;
asm("syscall");
return 0;
}
* ```c
int main(void) {
register int syscall_no asm("rax") = 1;
register int arg1 asm("rdi") = 1;
register char* arg2 asm("rsi") = "hello, world!\n";
register int arg3 asm("rdx") = 14;
asm("syscall");
return 0;
}
int main(void) {
register int syscall_no asm("rax") = 1;
register int arg1 asm("rdi") = 1;
register char* arg2 asm("rsi") = "hello, world!\n";
register int arg3 asm("rdx") = 14;
asm("syscall");
return 0;
}
那是__NR_*,实现在libc
https://jameshfisher.com/2018/02/20/c-inline-assembly-hello-world/
感觉头文件和库不能混着看吧。。
* 真實的 syscall 在 linux-header 包隨帶的 header file 吧
真實的 syscall 在 linux-header 包隨帶的表頭吧
POSIX 定義的方法都在 unistd.h 吧
可以像 Go 那样直接用系统调用
这样你不需要自己写汇编,直接调用 C 函数就行了
同名函数
是 C 语言的函数把 syscall 包装了一层。发起系统调用需要汇编,libc 把发起 read 系统调用的汇编代码封装在 read 函数里,供你调用
libc 是 syscall 封装吧
* 像是 clone()
是他包装成一个函数的模样
clone() kill()
* 长点就长点,多按几个 tab 就好了
POSIX 裡面的函數名也是通用字詞啊
你别导入unistd,有那么多事吗
长点就长点,多按
就是他把c语言的函数包装了一层 ?是function_wrapper()
最後就是直接把你參數順序放在棧裡
应该也没人想去撞 POSIX 里的函数名字吧
那就老老实实在名字前面加 prefix 好了
这很正常(
Function Signature 也是讓你和編譯器看的
libc提供open函数,这个函数去调用openat
提供fork函数,但是它调用的是clone😱😱😱
很容易撞名
libc 提供 read 函数,这个函数内部去调用 read 系统调用
C 最大的問題是沒有 namespace
syscall 可以直接用系统调用号
严格来说是的,C 语言调用的是 libc 提供的包装函数,包装了一层
這是 libc 的同名庫函數
> <@telegram_824372155:nichi.co> 不是,是 system call,它有一套自己的调用约定,不依赖 C 语言且不能被 C 编译器自动识别
是另一套语言体系吗
只不过很多时候 syscall 的函数签名与 C 语言有很大重叠,可以用 C 函数签名简单表示
是啊,为啥不是
本質是資料結構和算法
也就是说这些函数不是c语言的read,write
不是,是 system call,它有一套自己的调用约定,不依赖 C 语言且不能被 C 编译器自动识别
甚麼叫本質
这个词没有意义
* 這只是通用介面
這只是介面
不存在本质
是supervisor call
这些系统调用的本质是不是都是C语言呀
写信给oai,我是外交官必须给我解除限制🚫
[m.image] Screenshot_2026-02-11-11-27-10-013_com.zhihu.android.png
有人吗
理解不了自己违反tos还抱怨的
我想再投川普
https://polymarket.com/event/presidential-election-winner-2028
怎么还有一个实验室的人,开代理ip全球乱飘,共享一个 chatgpt pro ,然后抱怨被限制的
买的人够了,就rug pull,跟穿西装那次一样
这不是注定的吗
[m.image] image.jpeg
拆包了回到大几百M了
不然torch之前都涨到1.3g了
这个环境是古董环境
拆包了啊
6g, nice huge memory consume!
有群友有ai agent相关的群组吗,最近在玩opencode,想找个中文交流群
好像504了
unexpected status 504 Gateway Timeout: error code: 504, url: https://codex.viloze.com/responses, cf-ray: 9cc079300fd6d949-AMS
[m.video] f2faa11235a387af2e34e5d4ac4783d6_t01e476f07b861b7da2.gif.mp4
[m.image] image.jpeg
换显卡了还得重装pytorch
UserWarning:
NVIDIA RTX PRO 6000 Blackwell Workstation Edition with CUDA capability sm_120 is not compatible with the current PyTorch installation.
The current PyTorch install supports CUDA capabilities sm_50 sm_60 sm_70 sm_75 sm_80 sm_86 sm_90.
If you want to use the NVIDIA RTX PRO 6000 Blackwell Workstation Edition GPU with PyTorch, please check the instructions at https://pytorch.org/get-started/locally/
[m.image] (?)
21.5g
是穆罕默德阿里吗
阿里怎么这么强