x86 मशीन कोड, 162 बाइट्स
PROG.COM उदाहरण के लिए MS-DOS एमुलेटर, DOSBox में डाउनलोड और चलाएं ।
90 B3 B4 B4 02 90 90 B3 B2 B2 48 90 90 B3 CD CD 21 90 90 B3 B2 B2 65 90
90 B3 CD CD 21 90 90 B3 B2 B2 6C 90 90 B3 CD CD 21 90 90 B3 CD CD 21 90
90 B3 B2 B2 6F 90 90 B3 CD CD 21 90 90 B3 B2 B2 2C 90 90 B3 CD CD 21 90
90 B3 B2 B2 20 90 90 B3 CD CD 21 90 90 B3 B2 B2 77 90 90 B3 CD CD 21 90
90 B3 B2 B2 6F 90 90 B3 CD CD 21 90 90 B3 B2 B2 72 90 90 B3 CD CD 21 90
90 B3 B2 B2 6C 90 90 B3 CD CD 21 90 90 B3 B2 B2 64 90 90 B3 CD CD 21 90
90 B3 B2 B2 21 90 90 B3 CD CD 21 90 90 B3 CD CD 20 90
MINI.COM डाउनलोड को हटाने के बाद
90 B4 02 90 B2 48 90 CD 21 90 B2 65 90 CD 21 90 B2 6C 90 CD 21 90 CD 21
90 B2 6F 90 CD 21 90 B2 2C 90 CD 21 90 B2 20 90 CD 21 90 B2 77 90 CD 21
90 B2 6F 90 CD 21 90 B2 72 90 CD 21 90 B2 6C 90 CD 21 90 B2 64 90 CD 21
90 B2 21 90 CD 21 90 CD 20
कैसे चलाना है?
Ubuntu / Debian के लिए DOSBox स्थापित करें
sudo apt install dosbox
चलाओ
dosbox
DOSBOX में
mount c /home/user/path/to/your/directory
c:
PROG.COM
MINI.COM
यह कैसे काम करता है?
मशीन संचालन कोड विधानसभा भाषा निर्देशों का प्रतिनिधित्व करते हैं ।
MS-DOS में char प्रिंट करने के लिए आप रजिस्टर सेट करेंगे और इंटरप्ट करेंगे। एएच रजिस्टर 0x02 होगा, डीएल रजिस्टर में आपका चार्ट होता है। इंटरप्ट वेक्टर 0x21 है।
mov ah,0x2 ;AH register to 0x2 (B4 02)
mov dl,0x48 ;DL register to "H" (B2 48)
int 0x21 ;0x21 interrupt (CD 21)
MS-DOS COM फ़ाइल छोटे मॉडल का अच्छा चयन है, क्योंकि इसमें कोई हेडर नहीं है । यह 64K तक सीमित है, लेकिन हमारे मामले में यह मायने नहीं रखता है।
प्रोग्राम के उपयोग को रोकने के लिए 0x20 इंटरप्ट
int 0x20 ;0x20 interrupt (CD 20)
जादू
यदि आप 0xAB ओपकोड कमांड को एक पैरामीटर 0xCD के साथ निष्पादित करना चाहते हैं , तो आप लिखते हैं
AB CD
में PROG.COM
90 B3 AB AB CD 90
nop ; No operation (90)
mov bl,0xb4 ; BL register to AB (B3 AB)
AB CD command (AB CD)
nop ; No operation (90)
में MINI.COM
90 AB CD
nop ; No operation (90)
AB CD command (AB CD)
यह बराबर मशीन कोड है, यदि आप बीएल रजिस्टर का उपयोग नहीं करते हैं ।
जनक
हेक्स बाइनरी के साथ हेक्स के साथ टेक्स्ट फाइल को कन्वर्ट करें
cat hex_file | xxd -r -p > exec.com
function byte2hex(byte){
var ret=byte.toString(16).toUpperCase();
return ret.length==1 ? "0"+ret : ret;
}
function str2hex(str){
var ret = [];
for(var i=0;i<str.length;i++){
ret.push(byte2hex(str.charCodeAt(i)));
}
return ret;
}
function genCode(hexArr){
var ret = [["B4","02"]];
for(var i=0;i<hexArr.length;i++){
if(hexArr[i]!=hexArr[i-1]){
ret.push(["B2",hexArr[i]]);
}
ret.push(["CD","21"]);
}
ret.push(["CD","20"]);
return ret;
}
function magicCode(str){
var ret=[""];
var code=genCode(str2hex(str));
for(var i=0;i<code.length;i++){
ret.push("90 B3 "+code[i][0]+" "+code[i][0]+" "+code[i][1]+" 90");
if(i%4==3){ret.push("\n");}
}
return ret.join(" ");
}
function magicCodeMinified(str){
var ret=[""];
var code=genCode(str2hex(str));
for(var i=0;i<code.length;i++){
ret.push("90 "+code[i][0]+" "+code[i][1]);
if(i%8==7){ret.push("\n");}
}
return ret.join(" ");
}
var str=prompt("string","Hello, world!");
var out="PROG.COM\n" + magicCode(str)+"\n\nMINI.COM\n"+magicCodeMinified(str);
document.write(out.replace("\n","<br>"));
alert(out);