#archlinux-cn-offtopic

!sHfvsJejodKvXevZ5DIO_XTCyV0ElW1n6NOR__tH7Pc

23,333 messages · Page 195 of 234

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

Matrix Historian — Message Archive Browser