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
কীভাবে চলবে?
উবুন্টু / ডেবিয়ানদের জন্য ডসবক্স ইনস্টল করুন
sudo apt install dosbox
চালাও এটা
dosbox
ডসবক্সে
mount c /home/user/path/to/your/directory
c:
PROG.COM
MINI.COM
এটি কিভাবে কাজ করে?
মেশিন অপারেশন কোড প্রতিনিধিত্ব করে সমাবেশ ভাষা নির্দেশাবলী ।
এমএস-ডস-এ চারটি মুদ্রণের জন্য আপনি নিবন্ধগুলি সেট করবেন এবং বাধাগ্রস্থ করবেন। এএইচ রেজিস্টারে 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)
এমএস-ডস সিওএম ফাইলের ক্ষুদ্র মডেলটি ভাল চয়েস, কারণ এতে কোনও শিরোনাম নেই । এটি 64 কে দ্বারা সীমাবদ্ধ, তবে আমাদের ক্ষেত্রে এটি গুরুত্বপূর্ণ নয়।
প্রোগ্রাম বন্ধ করতে 0x20 বাধা ব্যবহার করুন
int 0x20 ;0x20 interrupt (CD 20)
জাদু
আপনি যদি একটি প্যারামিটার 0xCD দিয়ে 0xAB অপকড কমান্ডটি চালাতে চান তবে আপনি লিখবেন
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);