学校 OJ 探索
社团课上与同学玩学校 OJ 并尝试对评测机进行一些探索 为了方便就用 python 代码了
已知学校 OJ 使用的是氦星人系统 评测机禁用了os模块 导致一开始没法进行系统调用 遂尝试读写文件 发现居然是可以的
(socket模块依赖os模块 导致暂时只能通过 OJ 的测试功能获取代码输出)
先尝试硬写大量数据以搞爆评测机 发现会报File too large错误 于是放弃
根据平时使用经验(做题时的报错)得知评测机为Linux系统 使用 Python3.8
然后尝试向/tmp目录写文件 发现可以持久化保存 并且另一位同学也能读取到(顺便根据多次实验发现能读取到的概率大约 50% 推测有两个评测机负载均衡)
之后尝试读取/proc等以获取系统信息 如下
| 信息 | 来源 | 值 | 
|---|---|---|
| CPU | /proc/cpuinfo | 
Intel® Xeon® Gold 5120 CPU @ 2.20GHz | 
| 内存 | /proc/meminfo | 
16GB | 
| 硬盘分区 | /proc/partitions | 
104857600 blocks (sda)… (按 1KB / block 则为 100GB) | 
| 启动镜像 | /proc/cmdline | 
vmlinuz-3.10.0-1127.10.1.el7.x86_64 | 
| 内核版本 | /proc/version | 
Linux version 3.10.0-1127.10.1.el7.x86_64 ([email protected]) | 
| GCC 版本 | /proc/version | 
gcc version 4.8.5 20150623 (Red Hat 4.8.5-39) (GCC) | 
| 运行时间 | /proc/uptime | 
运行:788.4 天;空闲:784.2 天 / 核心(空闲率 99.46%) | 
回家后同学发现可以使用posix模块进行系统调用 并且该模块没有被禁用 于是打开新世界的大门
首先肯定是是ls 当前目录包含source、source.c、input、core.xxxxx等文件
其中source就是 python 代码的源文件 cat后发现评测时会在提交的 python 代码前加上如下代码:
import random  | 
source.c和core.xxxxx分别是 C++ 程序的源代码和编译后的程序
input 则为测试输入
…/…/…/rwl/okcall.h -> HUSTOJ
后记:
C++ 没禁用系统调用 这下舍近求远了
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 真-大沙子的博客!
 评论


