-
紫金港第一皮革<・)))><< Post #210原来如此!没去过哈尔滨 不知道那里的锅包肉是什么风格
有点好奇下面的萝卜丝是腌萝卜还是炒萝卜(我不喜欢胡萝卜但如果少量/腌制尝不出胡萝卜的味道就还可以吃下去)
紫金港第一皮革<・)))><< Post #353今日观鹭
Summary




-
紫金港第一皮革<・)))><< Post #208怎么感觉这个锅包肉的表面有种颗粒状的质感 和我在北方吃的锅包肉不太一样🤔
另外每日爱浙()Summary
在沈阳🐖的番茄锅包肉 也🐖了老式锅包肉 但个人感觉番茄的更好吃
而且老式锅包肉里面居然有香菜!被偷袭了😡

紫金港第一皮革<・)))><< Post #352今日观鹭






紫金港第一皮革<・)))><< Post #351居然这样吗 害怕😱
这学期好多课给分不怎么样 太可怕了
紫金港第一皮革<・)))><< Post #350可以的!
我也是转发同学的分享()
紫金港第一皮革<・)))><< Post #347感觉现在作业很多 而且越来越不想学了怎么办🫠
-
紫金港第一皮革<・)))><< Post #201实验兔会剪指甲吗()
兔兔的指甲挺尖的 感觉有点危险
紫金港第一皮革<・)))><< Post #345今天好像开出来的剧本都很不错 投胎技术 upup
不过话说为什么玩这么多次一次都没遇到朝鲜出生 在网上看到过 很好奇模拟效果如何Summary


紫金港第一皮革<・)))><< Post #346很好玩的游戏!
无需安装,在线游玩:https://city-and-metro.pages.dev
已在 GitHub 开源,喜欢的点一下 Star:GitHub - VinsonFung/city-and-metro: 城市与地铁:单人地铁规划与城市交通模拟。Copyright © 2026 VinsonFung,仅限非商业使用。
也欢迎访问我的个人博客网站:vinsonblog.cn
紫金港第一皮革<・)))><< Post #343欧洲出生就是爽啊()
Summary


-
紫金港第一皮革<・)))><< Post #2欢迎新门友

-
jERRy Post #1
听说这是兵马俑 bbs 后,西交新的 bbs,大家好啊😁
紫金港第一皮革<・)))><< Post #342新的爽文人生
台湾乡村→澳大利亚入籍
忍不住感叹游戏里的花钱机会太少 出国旅行还只能每两年选一次()
确实可以换大房子和购买多套房屋出租 不过之前玩过一个 1980 上海双职工家庭出生的开局 发现游戏里面房价上涨幅度明显小于真实幅度Summary


-
紫金港第一皮革<・)))><< Post #197已玩两局
第一局输给了 ai 于是第二局直接模仿上一局遇到的 ai 说话 赢了🤣 -
紫金港第一皮革<・)))><< Post #195诶这个网站需要注册吗
紫金港第一皮革<・)))><< Post #341因为确实是以前在水源认识的 hhh
认识的门友基本都由于地理距离的阻隔无法约饭
紫金港第一皮革<・)))><< Post #2使用此功能后再次打开同一话题会出现 resume listening?的弹窗 看起来有点烦()
- IIO Post #1


门友发了很多值得阅读的东西,但是现在在家阅读的时间少,开车的时间多。
开车的时候听 BBC 听腻了虽然有浏览器插件可以听网页
Read Aloud: A Text to Speech Voice Reader但是不知道新增什么功能了,那就新增一个聆听功能吧。
支持自动播放下一条 post。
可以在设置里自定义音色。
紫金港第一皮革<・)))><< Post #338周末🐖的三文鱼
因为不能吃辣适应不了芥末的味道 吃几块之后感觉很腻 后来查了一下或许弄点柠檬汁/牛油果会好一些 但家里刚好没有这些
但是鱼的味道是新鲜的Summary

JacKeiner Post #339不是,你要在这工作的话是工签 - 永久居民 - 入籍
相对来说难度不算大
紫金港第一皮革<・)))><< Post #337新加坡入籍似乎主要是看资产?
我不太了解这些()
JacKeiner Post #331等我们这代平均九十多应该也正常(?)
JacKeiner Post #330所以现在不是旧 discourse 了吗👀
- Aanonymous Post #332
赞同,还有深夜在走廊打电话,跺脚(触发声控灯晾衣服)
天生万物以养人

- IIO Post #333
然也,现在这个是开发团队自主研发的基于 sveltekit 的软件,名称还没想好,名称想好后计划把它开源
紫金港第一皮革<・)))><< Post #334新的爽文剧本:印度乡镇→澳洲入籍
Summary

紫金港第一皮革<・)))><< Post #329大概五局🤣
不过我有时候会选择上世纪出生 开出发达国家的概率稍微大一些
紫金港第一皮革<・)))><< Post #327体验了白女幸福的一生🤣
话说这个游戏里的平均寿命都好长 感觉比现实中更长一些()Summary

紫金港第一皮革<・)))><< Post #326全新的爽文一般的剧本🤣
Summary

紫金港第一皮革<・)))><< Post #325感觉这个游戏挺好玩的
还可以选择在过去(1950 以后)和未来出生 在过去出生很有意思
目前不论选择什么年代 开出来绝大部分都是发展中国家出生 有好几次在印度出生 人口大国这一块🤣
印象比较深刻的大概是有次开出美国第四分位的富裕家庭 体验了白男顺遂的一生()
还有开局 1980 的中国乡村 但一直坚持读书最终在北京扎根 孩子还去美国了
还有几次出生在非洲 没过多久就忽然黑屏因为疾病去世了(话说其实可能加个战争去世会更加贴近现实(bushi))
参考网址: 日网最近很流行的投胎游戏 - 小红书
紫金港第一皮革<・)))><< Post #324好困好困
紫金港第一皮革<・)))><< Post #323明天回家!
焦急等待 ing
紫金港第一皮革<・)))><< Post #322点了一盒寿司但收获了 6 包酱油和 4 包芥末🤯

玉米🌽 Post #239
当 00 后当上收银员 小爱音压力睦子米
紫金港第一皮革<・)))><< Post #321好可怕🙀
我经常被卫生间的声音吵醒 半夜洗漱的人该
紫金港第一皮革<・)))><< Post #319我感觉在学校睡眠质量差除了交大本身让我很压抑以外 宿舍糟糕的隔音一定是一个重要原因
Oct 14, 2026, 11:29:33 PM (Asia/Shanghai)开始特别睡觉行动
紫金港第一皮革<・)))><< Post #317忽然意识到自己一直忘了发早睡打卡
昨晚在 2330 前躺下了 但中途醒了好几次还有做梦 睡的很不安稳
紫金港第一皮革<・)))><< Post #316讨厌交大
想回家
能不能快进到周五- IIO Post #187
试了一下是可以的。有可能你的 File size exceeds the limit of 10MiB.
-
Dvm Post #186@io 呼叫牢 min
紫金港第一皮革<・)))><< Post #314好猎奇的口味
比前面看到的松茸鸡汤饼干还猎奇

滨寿司的期间限定金目鲷好吃😋
今日盒照放送

- IIO Post #313
在我的资料里面改:
https://xjtu.app/my/security
紫金港第一皮革<・)))><< Post #312晚上打算和源友约饭 🐖开心
无状态垃圾桶 Post #20这个 docker workspace 真是让人头疼,因为共享 host 内核所以 perf 装上用不了 🫠
不过 proj* 里大概也用不上(
羽流弦ノ迹 Post #1CQ CQ CQ
DE BI9CFK
电信科协是你交成立最早的科技社团,原无线电爱好者协会。我们正在筹备重新恢复业余无线电业务.未来可能策划包括但不限于以下活动:
各频段业余通联/SSTV 图像 + 卫星云图接收/校内 LoRa 组网/业余射电天文。
在这里你可以学习到包括制作 LNA,天线以及 SDR 等电子制作和控制等知识。也可以通过UHF 和台灯微波炉通联短波实现跨洲际/月面反射通信,交到五湖四海乃至国际空间站上的地球人朋友.欢迎校内外新老业余无线电爱好者加入.


无状态垃圾桶 Post #1Fa25 website
CS 162 — Fall 2025
(我爬下来了但是太大上传不了,需要可以 pm 我)Textbooks
Operating Systems Principles and Practice, Volume 1: Kernels and Processes
Operating Systems Principles and Practice, Volume 2: Concurrency
Operating Systems Principles and Practice, Volume 3: Memory Management
Operating Systems Principles and Practice, Volume 4: Persistent StorageSp22 course video
无状态垃圾桶 Post #18void _start(int argc, char* argv[]) { exit(main(argc, argv)); }0804890f <_start>: 804890f: 55 push %ebp 8048910: 89 e5 mov %esp,%ebp 8048912: 83 ec 18 sub $0x18,%esp 8048915: 8b 45 0c mov 0xc(%ebp),%eax 8048918: 89 44 24 04 mov %eax,0x4(%esp) 804891c: 8b 45 08 mov 0x8(%ebp),%eax 804891f: 89 04 24 mov %eax,(%esp) 8048922: e8 6d f7 ff ff call 8048094 <main> 8048927: 89 04 24 mov %eax,(%esp) 804892a: e8 d4 22 00 00 call 804ac03 <exit>之前学 15-213 的时候看的是 SysV AMD64 ABI,参数是用寄存器传递的,结果到这里愣了半天
8048915: 8b 45 0c mov 0xc(%ebp),%eax 8048918: 89 44 24 04 mov %eax,0x4(%esp) 804891c: 8b 45 08 mov 0x8(%ebp),%eax 804891f: 89 04 24 mov %eax,(%esp)这四步应该是 cdecl 传参,_start 的 caller 把 argc, argv 分别放在 0xc(%ebp), 0x8(%ebp) (0x4(%ebp), (%ebp) 分别是返回地址和 callee-saved %ebp)
接着 _start 把 argc, argv 分别复制到 (%esp), 0x4(%esp),作为 main 的参数
所以函数的参数储存在其 caller 的栈帧上
无状态垃圾桶 Post #19proj-pregame
主要任务是修复三个测试
do-nothing
/* Does absolutely nothing. */ #include "tests/lib.h" int main(int argc UNUSED, char* argv[] UNUSED) { return 162; }Page fault at 0xc0000008: rights violation error reading page in user context. do-nothing: dying due to interrupt 0x0e (#PF Page-Fault Exception). Interrupt 0x0e (#PF Page-Fault Exception) at eip=0x8048915可以看到在用户模式发生了非法读取导致的页面错误,0x8048915 处的指令访问了 0xc0000008
- 搜索 0xc0000000 可找到:
/* Kernel virtual address at which all physical memory is mapped. Must be aligned on a 4 MB boundary. */ #define LOADER_PHYS_BASE 0xc0000000 /* 3 GB. *//* Base address of the 1:1 physical-to-virtual mapping. Physical memory is mapped starting at this virtual address. Thus, physical address 0 is accessible at PHYS_BASE, physical address address 0x1234 at (uint8_t *) PHYS_BASE + 0x1234, and so on. This address also marks the end of user programs' address space. Up to this point in memory, user programs are allowed to map whatever they like. At this point and above, the virtual address space belongs to the kernel. */ #define PHYS_BASE ((void*)LOADER_PHYS_BASE) /* Returns true if VADDR is a user virtual address. */ static inline bool is_user_vaddr(const void* vaddr) { return vaddr < PHYS_BASE; } /* Returns true if VADDR is a kernel virtual address. */ static inline bool is_kernel_vaddr(const void* vaddr) { return vaddr >= PHYS_BASE; }可知内核虚拟内存空间以及物理内存映射从 0xc0000000 开始(用户虚拟内存空间结束),因此在用户空间对 0xc0000008 的访问是非法的,触发了页面错误

- 用 objdump 把反汇编 do-nothing 后查找 0x8048915 可得到:
0804890f <_start>: 804890f: 55 push %ebp 8048910: 89 e5 mov %esp,%ebp 8048912: 83 ec 18 sub $0x18,%esp 8048915: 8b 45 0c mov 0xc(%ebp),%eax 8048918: 89 44 24 04 mov %eax,0x4(%esp) 804891c: 8b 45 08 mov 0x8(%ebp),%eax 804891f: 89 04 24 mov %eax,(%esp) 8048922: e8 6d f7 ff ff call 8048094 <main> 8048927: 89 04 24 mov %eax,(%esp) 804892a: e8 d4 22 00 00 call 804ac03 <exit>(对就是楼上那个片段)
这是
lib/user/entry.c,负责在用户程序返回后调用 exit syscall触发页面错误的指令是
mov 0xc(%ebp),%eax,作用是读取栈上的 argv,不过实际读取了 0xc0000008用 gdb 追踪内核创建进程和进入用户模式的过程:
- 创建新线程
- 分配 PCB,并和主线程关联
- 糊一个假的中断帧,从磁盘加载用户程序,分配栈内存,初始化中断帧内的寄存器值
- 调用正常中断恢复的流程,通过 iret 进入用户空间,并开始执行用户程序

这里炸掉是因为内核没有正确根据 cdecl 实现 _start 的 argc, argv 的传递,而是直接把中断帧的 %esp 设置为实际栈内存的顶部,导致 argc, argv 的理论位置超过了栈顶进入了内核虚拟内存空间,详见下图:

我草我字好丑任务要求我们只要修好错误就行,不必正确实现传参,所以很简单:
// Hack for do-nothing. // Offset esp so argc, argv copy in _start does not trigger page fault. if_.esp -= 0xc;给初始 %esp 加个偏移量,保证 argc, argv 都在栈内就可以了
do-not-much
/* Does pretty much nothing. */ #include "tests/lib.h" int main(int argc, char* argv[] UNUSED) { return argc; }测试要求 exit(1),也就是 argc 需要是 1,我们在内核模式下分配栈后设置一下即可
// Hack for do-nothing. // Offset esp so argc, argv copy in _start does not trigger page fault. if_.esp -= 0xc; // Hack for do-not-much. // Set argc to 1. *(int*) (if_.esp+0x4) = 1;stack-align-v
/* Does absolutely nothing. */ #include "tests/lib.h" int main(int argc, char* argv[] UNUSED) { register unsigned int esp asm("esp"); if (argc != 1) // argc must be 1. return -1; else return esp % 16; }测试要求 exit(0),即 esp 必须 16B 对齐,%esp 偏移量 +8 即可
// Hack for do-nothing. // Offset esp so argc, argv copy in _start does not trigger page fault. if_.esp -= 0xc + 0x8; // Align to 16 bytes. // Hack for do-not-much. // Set argc to 1. *(int*) (if_.esp+0x4) = 1;