打報告打到快睡著,這篇大致提一下做法。
首先去 read .o 檔,然後 explode
strs=read_file(files+".o");
tmps=explode(strs,"\n");
接著土法煉鋼,讀出每個變數
foreach(tmp in tmps)
{
i=0;
while(tmp[i..i]!=" ")
i++;
vars=([tmp[0..i],
}
然後去產生一個臨時的 .c 檔:
[email protected]
inherit DAEMON;
LONG
;
content+="mixed ";
foreach(tmp in tmps)
content+=tmp+",";
content+="\n\n";
[email protected]
void create()
{
::create();
seteuid(getuid(this_object()));
LONG;
content+=" restore_object("+file+");\n}\n\n";
write_file("/open/tmp_load.c",content);
update_files("/open/tmp_load");
這樣 /open/tmp_load.c 就能用來 restore 目標 .o 檔,並且
將載入的變數資料也全部存在這個 tmp_load.c 物件裡頭。
當然實際上跟 running 一樣,這東西寫起來是落落長的,不過
如果能寫出來,好處很多。
LAechan