উইন্ডোজ ডেভেলপমেন্টে e_lfanew ফিল্ডের লুকানো বিবরণ
`IMAGE_DOS_HEADER` কাঠামোর e_lfanew ফিল্ড উইন্ডোজ এক্সিকিউটেবল ফাইল হ্যান্ডলিংয়ে গুরুত্বপূর্ণ ভূমিকা পালন করে। `winnt.h` তে সংজ্ঞায়িত, এই ক্ষেত্রটি PE শিরোনামের শুরুতে নির্দেশ করে, এটি ফাইলগুলি লোড এবং কার্যকর করার সিস্টেমের ক্ষমতার জন্য গুরুত্বপূর্ণ করে তোলে। যাইহোক, এর ডাটা টাইপ—সেটি `লং` বা `ডওয়ার্ড` হওয়া উচিত—সেটি ডেভেলপারদের মধ্যে কৌতূহল ও বিতর্কের জন্ম দিয়েছে। 😕
Windows SDK-এর পুরানো সংস্করণগুলিতে, এই ক্ষেত্রটিকে প্রায়শই একটি `DWORD` হিসাবে দেখা যেত, কিন্তু আধুনিক বাস্তবায়ন, যেমন Windows 11 SDK-তে, এটিকে `লং` হিসাবে সংজ্ঞায়িত করে। পরিবর্তনটি তুচ্ছ বলে মনে হতে পারে, তবে উইন্ডোজের অভ্যন্তরীণ কাঠামোর মধ্যে যে কেউ অনুসন্ধান করে তার জন্য এর পেছনের যুক্তি বোঝা অপরিহার্য। এই পরিবর্তনটি পশ্চাদপদ সামঞ্জস্য, সিস্টেম ডিজাইনের সিদ্ধান্ত এবং এমনকি কোডিং অনুশীলন সম্পর্কে প্রশ্ন উত্থাপন করে।
একটি উত্তরাধিকার অ্যাপ্লিকেশন ডিবাগ করার কল্পনা করুন শুধুমাত্র ক্ষেত্রের প্রকারের মধ্যে একটি অমিল খুঁজে পেতে৷ এই ধরনের অসঙ্গতিগুলি বিভ্রান্তির দিকে নিয়ে যেতে পারে, বিশেষ করে যখন ঐতিহাসিক ডকুমেন্টেশনে ডুব দেয়। এই জটিলতা প্রতিফলিত করে কিভাবে বিকাশমান প্রযুক্তির জন্য ডেভেলপারদের অভিযোজনযোগ্য এবং সতর্ক থাকতে হয়।
এই নিবন্ধটির মাধ্যমে, আমরা e_lfanew ক্ষেত্রের বিবর্তনকে বিচ্ছিন্ন করব, এর ঐতিহাসিক সংজ্ঞা এবং `LONG`-এ স্থানান্তরিত হওয়ার পেছনে যুক্তি অন্বেষণ করব। বাস্তব-বিশ্বের উদাহরণ এবং আধুনিক উন্নয়নের সম্ভাব্য প্রভাবগুলি পরীক্ষা করে, আমরা Windows প্রোগ্রামিংয়ের এই আকর্ষণীয় বিশদটির উপর আলোকপাত করার লক্ষ্য রাখি। 🚀
আদেশ | ব্যবহারের উদাহরণ |
---|---|
struct.unpack_from() | একটি বিন্যাস স্ট্রিং এবং একটি অফসেট ব্যবহার করে একটি বাইনারি বাফার থেকে নির্দিষ্ট ডেটা বের করে। উদাহরণস্বরূপ, struct.unpack_from('I', buffer, 60) বাফারের বাইট 60 থেকে শুরু হওয়া একটি DWORD মান বের করে। |
IMAGE_DOS_HEADER | একটি পূর্বনির্ধারিত উইন্ডোজ কাঠামো যা একটি PE ফাইলের DOS হেডারকে প্রতিনিধিত্ব করে। এক্সিকিউটেবল ফাইলগুলিতে PE হেডারটি সনাক্ত করার জন্য e_lfanew-এর মতো ক্ষেত্রগুলি অ্যাক্সেস করার জন্য এটি অপরিহার্য। |
sizeof() | ডেটা টাইপ বা কাঠামোর আকার (বাইটে) নির্ধারণ করতে ব্যবহৃত হয়। উদাহরণস্বরূপ, sizeof(IMAGE_DOS_HEADER) DOS হেডার কাঠামোর আকার প্রদান করে। |
fread() | একটি বাফারে একটি ফাইল থেকে বাইনারি ডেটা পড়ে। C-তে, এটি ডস হেডার লোড করতে fread(&header, sizeof(header), 1, file) এর মত ব্যবহার করা যেতে পারে। |
std::cout | কনসোলে আউটপুট প্রিন্ট করার জন্য একটি C++ কমান্ড। প্রায়ই std::cout << "e_lfanew: " << header.e_lfanew << std::endl; এর মতো বাইনারি ফাইলের বিবরণ ডিবাগ করার জন্য ব্যবহৃত হয়। |
unittest.TestCase | পরীক্ষার ক্ষেত্রে তৈরি করার জন্য একটি পাইথন ক্লাস। এটি স্ক্রিপ্টের শর্তগুলি যাচাই করার জন্য assertEqual() এর মতো পদ্ধতিগুলি প্রদান করে, যেমন, e_lfanew-এর ডিফল্ট মান পরীক্ষা করা। |
std::ifstream | বাইনারি ফাইল পড়তে C++ এ ব্যবহৃত হয়। উদাহরণস্বরূপ, std::ifstream ফাইল("example.exe", std::ios::binary) বাইনারি মোডে একটি এক্সিকিউটেবল ফাইল খোলে। |
binary mode ('rb') | পাইথন বা সি-তে একটি ফাইল মোড যা ফাইলগুলিকে কাঁচা বাইনারি ডেটা হিসাবে পাঠ করে। উদাহরণস্বরূপ, open('example.exe', 'rb') দিয়ে নিশ্চিত করে যে কোনো অক্ষর ডিকোডিং হবে না। |
assertEqual() | পরীক্ষার সময় দুটি মান সমান কিনা তা যাচাই করে। ইউনিটটেস্টে, এটি সঠিকতা নিশ্চিত করতে ব্যবহৃত হয়, যেমন self.asssertEqual(e_lfanew, 0)। |
IMAGE_DOS_HEADER বিশ্লেষণের জন্য স্ক্রিপ্টের কার্যকারিতা বিচ্ছিন্ন করা
প্রদত্ত স্ক্রিপ্টগুলি পরীক্ষা করার জন্য ডিজাইন করা হয়েছে e_lfanew একটি PE (পোর্টেবল এক্সিকিউটেবল) ফাইলের `IMAGE_DOS_HEADER` কাঠামোর মধ্যে ক্ষেত্র। C উদাহরণে, প্রোগ্রামটি কাঠামোর আকার এবং এর ক্ষেত্র নির্ধারণ করতে সরাসরি `sizeof()` ফাংশন ব্যবহার করে। এটি বুঝতে সাহায্য করে যে `e_lfanew` কে `LONG` বা `DWORD` হিসেবে বিবেচনা করা হয়, বাইটের আকারের উপর ভিত্তি করে। লিগ্যাসি উইন্ডোজ এক্সিকিউটেবলের সাথে ডিবাগিং বা কাজ করার সময় এই ধরনের বিশদ পরিদর্শন অত্যন্ত গুরুত্বপূর্ণ, যেখানে ডেটা টাইপের অমিল রানটাইম ত্রুটির কারণ হতে পারে। এই পদ্ধতিটি বিশেষত নিম্ন-স্তরের বিকাশকারীদের জন্য উপযোগী যারা বাইনারি ফাইল ফরম্যাটের সাথে ঘনিষ্ঠভাবে কাজ করে। 🔍
পাইথন স্ক্রিপ্ট বাইনারি মোডে একটি PE ফাইল পার্স করার জন্য `struct.unpack_from()` ফাংশন ব্যবহার করে। প্রথম 64 বাইট (DOS হেডার) পড়ার মাধ্যমে এবং বাইট 60 থেকে PE হেডারের অফসেট বের করে, এটি `e_lfanew` ক্ষেত্রটিকে যাচাই করার একটি দ্রুত উপায় প্রদান করে। এই পদ্ধতিটি অত্যন্ত বহনযোগ্য এবং অটোমেশনের জন্য উপযুক্ত, কারণ পাইথন স্ক্রিপ্টগুলি পুনঃসংকলন ছাড়াই বিভিন্ন প্ল্যাটফর্ম জুড়ে চলতে পারে। উপরন্তু, এই পদ্ধতিটি PE শিরোনামের অন্যান্য ক্ষেত্রগুলি পরিদর্শন করার জন্য প্রসারিত করা যেতে পারে, এটি বিস্তৃত বাইনারি বিশ্লেষণের কাজগুলির জন্য বহুমুখী করে তোলে। 🚀
ক্রস-প্ল্যাটফর্ম প্রকল্পগুলির সাথে কাজ করা বিকাশকারীদের জন্য, C++ স্ক্রিপ্ট একটি ডেডিকেটেড ফাংশনে বৈধতা যুক্তিকে মোড়ানোর মাধ্যমে একটি মডুলার পদ্ধতির প্রদর্শন করে। আউটপুটের জন্য C++ এর `std::cout` এবং ফাইল ইনপুটের জন্য `std::ifstream` ব্যবহার করে, স্ক্রিপ্ট রক্ষণাবেক্ষণযোগ্যতা এবং স্বচ্ছতার ওপর জোর দেয়। এই পদ্ধতিটি বিশেষত বড় আকারের অ্যাপ্লিকেশনগুলিতে উপকারী, যেখানে ফাংশনগুলি পুনরায় ব্যবহার করা যেতে পারে এবং সহজেই বিস্তৃত সিস্টেমে একত্রিত করা যায়। উদাহরণস্বরূপ, একটি গেম ডেভেলপার পশ্চাদগামী সামঞ্জস্যের জন্য একটি পুরানো এক্সিকিউটেবল বিশ্লেষণ করে আধুনিক সিস্টেমের সাথে মসৃণ একীকরণ নিশ্চিত করতে এই পদ্ধতির উপর নির্ভর করতে পারে। 🛠️
অবশেষে, পাইথন ইউনিট পরীক্ষার স্ক্রিপ্ট দেখায় কিভাবে কোড পরিচালনার ক্ষেত্রে 'e_lfanew' ফিল্ডের দৃঢ়তা নিশ্চিত করা যায়। ক্ষেত্রের ডিফল্ট মানের মতো শর্তগুলি পরীক্ষা করে, বিকাশকারীরা সম্ভাব্য বাগগুলি তাড়াতাড়ি ধরতে পারে। এই অনুশীলনটি পিই ফাইলগুলির সাথে ইন্টারঅ্যাক্ট করে এমন সরঞ্জামগুলির অখণ্ডতা বজায় রাখার জন্য অত্যাবশ্যক৷ একটি দৃশ্যকল্প কল্পনা করুন যেখানে একটি বিল্ড পাইপলাইন প্রতিদিন হাজার হাজার বাইনারি প্রক্রিয়া করে; এই ধরনের পরীক্ষা নির্ভরযোগ্যতা নিশ্চিত করে এবং ব্যয়বহুল ডাউনটাইম প্রতিরোধ করে। একসাথে, এই স্ক্রিপ্টগুলি উইন্ডোজ এক্সিকিউটেবলের কাঠামো বিশ্লেষণ এবং যাচাই করার জন্য একটি বিস্তৃত টুলকিট প্রদান করে, বিভিন্ন ব্যবহারের ক্ষেত্রে নমনীয়তা সহ বিকাশকারীদের ক্ষমতায়ন করে। ✅
IMAGE_DOS_HEADER কাঠামোতে e_lfanew ক্ষেত্র বিশ্লেষণ করা হচ্ছে
এই স্ক্রিপ্টটি IMAGE_DOS_HEADER গঠন পার্সিং এবং C ভাষা ব্যবহার করে e_lfanew ক্ষেত্রের ধরন যাচাই করে। নিম্ন-স্তরের বাইনারি বিশ্লেষণের জন্য এই পদ্ধতিটি বিশেষভাবে কার্যকর।
#include <stdio.h>
#include <windows.h>
int main() {
IMAGE_DOS_HEADER dosHeader;
printf("Size of IMAGE_DOS_HEADER: %zu bytes\\n", sizeof(dosHeader));
printf("Size of e_lfanew field: %zu bytes\\n", sizeof(dosHeader.e_lfanew));
if (sizeof(dosHeader.e_lfanew) == sizeof(LONG)) {
printf("e_lfanew is of type LONG\\n");
} else if (sizeof(dosHeader.e_lfanew) == sizeof(DWORD)) {
printf("e_lfanew is of type DWORD\\n");
} else {
printf("e_lfanew type is not standard\\n");
}
return 0;
}
পাইথনের স্ট্রাকট মডিউল ব্যবহার করে e_lfanew টাইপ সনাক্ত করা এবং পরিবর্তন করা
এই স্ক্রিপ্টটি একটি উইন্ডোজ এক্সিকিউটেবল ফাইলের বাইনারি স্ট্রাকচার বিশ্লেষণ করে e_lfanew ফিল্ডকে ব্যাখ্যা করে, সরলতা এবং বহনযোগ্যতার জন্য পাইথন ব্যবহার করে।
import struct
def parse_dos_header(file_path):
with open(file_path, 'rb') as file:
dos_header = file.read(64)
e_lfanew = struct.unpack_from('I', dos_header, 60)[0]
print(f"e_lfanew: {e_lfanew} (DWORD by unpacking)")
parse_dos_header('example.exe')
একটি ক্রস-প্ল্যাটফর্ম C++ অ্যাপ্লিকেশনে e_lfanew যাচাই করা হচ্ছে
এই স্ক্রিপ্টটি e_lfanew টাইপ এবং এর ব্যাখ্যা যাচাই করার জন্য একটি মডুলার এবং পুনঃব্যবহারযোগ্য ফাংশন প্রদান করে, বিস্তারিত এক্সিকিউটেবল পার্সিং প্রয়োজন এমন অ্যাপ্লিকেশনের জন্য উপযুক্ত।
#include <iostream>
#include <windows.h>
void validateELfanew() {
IMAGE_DOS_HEADER header;
std::cout << "Size of IMAGE_DOS_HEADER: " << sizeof(header) << " bytes\\n";
std::cout << "Size of e_lfanew: " << sizeof(header.e_lfanew) << " bytes\\n";
if (sizeof(header.e_lfanew) == sizeof(LONG)) {
std::cout << "e_lfanew is defined as LONG\\n";
} else if (sizeof(header.e_lfanew) == sizeof(DWORD)) {
std::cout << "e_lfanew is defined as DWORD\\n";
} else {
std::cout << "e_lfanew has an unknown type\\n";
}
}
int main() {
validateELfanew();
return 0;
}
বাইনারি হেডার বৈধতার জন্য পাইথনের সাথে ইউনিট টেস্টিং
এই স্ক্রিপ্টটি পাইথনের ইউনিটটেস্ট মডিউল ব্যবহার করে e_lfanew-এর জন্য বাইনারি পার্সিংয়ের কার্যকারিতা যাচাই করার জন্য ইউনিট পরীক্ষা প্রদান করে।
import unittest
import struct
class TestDosHeader(unittest.TestCase):
def test_e_lfanew(self):
header = bytes(64)
e_lfanew = struct.unpack_from('I', header, 60)[0]
self.assertEqual(e_lfanew, 0, "Default e_lfanew should be 0")
if __name__ == "__main__":
unittest.main()
IMAGE_DOS_HEADER-এ e_lfanew-এর বিবর্তন আনপ্যাক করা হচ্ছে
`IMAGE_DOS_HEADER`-এ e_lfanew ক্ষেত্রের একটি আকর্ষণীয় দিক হল এর দ্বৈত উপস্থাপনা হয় `LONG` বা `DWORD`। এই পার্থক্যটি Windows SDK সংস্করণ এবং ডিজাইন পছন্দের সূক্ষ্ম পার্থক্য থেকে উদ্ভূত হয়। ঐতিহাসিকভাবে, উইন্ডোজ 9x-এর মতো পুরানো সিস্টেমগুলি প্রায়শই 'DWORD' ব্যবহার করে জোর দেয় যে ক্ষেত্রটি স্বাক্ষরবিহীন ছিল, অফসেট হিসাবে এর ভূমিকা প্রতিফলিত করে। যাইহোক, সাম্প্রতিক Windows SDK-এ, `LONG` ব্যবহার করা হয়, যা স্বাক্ষরিত মান সংরক্ষণ করতে পারে, সম্ভাব্য বর্ধিতকরণ বা ভবিষ্যতের সামঞ্জস্য বৈশিষ্ট্যের ইঙ্গিত দেয়। যদিও কার্যকরী পার্থক্য অনেক ক্ষেত্রে ন্যূনতম হতে পারে, ক্রস-সংস্করণ সামঞ্জস্য বজায় রাখার বিকাশকারীদের জন্য প্রভাবগুলি বোঝা অত্যন্ত গুরুত্বপূর্ণ। 🔄
টাইপ পরিবর্তনটি PE (পোর্টেবল এক্সিকিউটেবল) লোডার আচরণের মধ্যেও রুট হতে পারে। PE লোডারকে অবশ্যই PE শিরোনামটি সুনির্দিষ্টভাবে সনাক্ত করতে হবে, এবং `e_lfanew` কে `LONG` হিসাবে সংজ্ঞায়িত করা কিছু মেমরির সীমাবদ্ধতা বা স্থাপত্য সিদ্ধান্তের সাথে সারিবদ্ধ করার একটি পছন্দকে প্রতিফলিত করতে পারে। উদাহরণস্বরূপ, ডিবাগিং বা উন্নত বিশ্লেষণে, বিকাশকারীরা এক্সিকিউটেবলের সম্মুখীন হতে পারে যেখানে অফসেটকে স্বাক্ষরিত সমন্বয়ের জন্য অ্যাকাউন্ট করতে হবে। এই সূক্ষ্ম নমনীয়তা অ-মানক শিরোনাম জড়িত প্রান্ত ক্ষেত্রে ঝুঁকি কমাতে পারে, বিশেষ করে গবেষণা বা নিরাপত্তা অ্যাপ্লিকেশনে। 🛡️
বিকাশকারীদের জন্য, পুরানো SDK-এর উপর নির্ভর করে পুরানো বাইনারি বা সরঞ্জামগুলি বিশ্লেষণ করার সময় সামঞ্জস্য নিশ্চিত করা অপরিহার্য। এটি পরিচালনা করার একটি উপায় হল `sizeof()` ফাংশন ব্যবহার করে রানটাইমে গতিশীলভাবে `e_lfanew` এর আকার যাচাই করা। এটি এর ধরন সম্পর্কে হার্ডকোডেড অনুমানের সম্ভাব্য ত্রুটিগুলি এড়ায়। এটি করার মাধ্যমে, উত্তরাধিকার এবং আধুনিক এক্সিকিউটেবল উভয়ই নিরাপদে প্রক্রিয়া করা যেতে পারে, শক্তিশালী টুলিং এবং অ্যাপ্লিকেশন স্থিতিশীলতা নিশ্চিত করে। এই অন্তর্দৃষ্টি অপ্রত্যাশিত আচরণ এড়াতে বিবর্তিত সিস্টেম লাইব্রেরির সাথে ক্রমাগত কোড সারিবদ্ধ করার গুরুত্বকে বোঝায়। 🚀
e_lfanew ক্ষেত্র সম্পর্কে সাধারণ প্রশ্ন
- কেন e_lfanew হিসাবে সংজ্ঞায়িত করা হয় LONG আধুনিক SDK-তে?
- এটি সম্ভবত স্বাক্ষরিত অফসেটের জন্য নমনীয়তা প্রদান করে, নির্দিষ্ট মেমরি কনফিগারেশনে ভুল ব্যাখ্যার ঝুঁকি হ্রাস করে।
- মধ্যে একটি বাস্তব পার্থক্য আছে DWORD এবং LONG?
- যদিও উভয়ই 4 বাইট, 'DWORD' স্বাক্ষরবিহীন, যেখানে 'LONG' স্বাক্ষরিত, যা অফসেটগুলি কীভাবে গণনা করা হয় তা প্রভাবিত করতে পারে।
- আমি কিভাবে পুরানো বাইনারিগুলির সাথে সামঞ্জস্যতা নিশ্চিত করতে পারি?
- ব্যবহার করে `e_lfanew` এর আকার যাচাই করুন sizeof() রানটাইমে গতিশীলভাবে এর প্রকারের সাথে মানিয়ে নিতে।
- টাইপ পার্থক্য রানটাইম ত্রুটি হতে পারে?
- এটি হতে পারে যদি আপনার কোড একটি নির্দিষ্ট প্রকার ধরে নেয় এবং একটি ভিন্ন SDK সংজ্ঞা সহ একটি এক্সিকিউটেবলের সম্মুখীন হয়।
- কোন সরঞ্জামগুলি IMAGE_DOS_HEADER গঠন বিশ্লেষণ করতে সাহায্য করতে পারে?
- `ডাম্পবিন` এবং কাস্টম স্ক্রিপ্টের মতো টুল ব্যবহার করে struct.unpack_from() পাইথনে বা fread() সি-তে অত্যন্ত কার্যকর।
- কেন Windows 11 SDK জোর দেয়? LONG?
- এটি আধুনিক মেমরি অনুশীলনের সাথে সারিবদ্ধ হতে পারে এবং স্থাপত্য পরিবর্তনের জন্য প্রস্তুত হতে পারে।
- e_lfanew পরিবর্তন করার কোন ঝুঁকি আছে কি?
- হ্যাঁ, ভুল অফসেটগুলি একটি এক্সিকিউটেবল অবৈধ বা আনলঞ্চযোগ্য রেন্ডার করতে পারে।
- PE হেডার পার্স করার সর্বোত্তম পন্থা কি?
- পাইথনের মতো লাইব্রেরির সাথে কাঠামোগত বাইনারি পার্সিং ব্যবহার করা struct অথবা সরাসরি মেমরি সি তে পড়ে।
- e_lfanew একটি বৈধ PE শিরোনাম নির্দেশ করে কিনা তা আমি কিভাবে পরীক্ষা করব?
- যাচাই করুন যে অফসেটটি `PE` স্বাক্ষর (0x50450000) দিয়ে শুরু হওয়া একটি হেডারের দিকে নিয়ে যায়।
- IMAGE_DOS_HEADER সম্পর্কে শেখার সুবিধাগুলি কী কী?
- এটি ডিবাগিং, রিভার্স ইঞ্জিনিয়ারিং এবং লিগ্যাসি সফ্টওয়্যারে সামঞ্জস্যতা নিশ্চিত করতে সহায়তা করে।
টাইপ বিতর্ক মোড়ানো
এর উত্তরণ e_lfanew `DWORD` থেকে `LONG` পর্যন্ত ক্ষেত্র উইন্ডোজে সিস্টেমের চাহিদা এবং ডিজাইনের নমনীয়তা প্রতিফলিত করে। এই পরিবর্তনটি সামঞ্জস্য বজায় রাখতে SDK আপডেটের সাথে সফ্টওয়্যার সারিবদ্ধ করার গুরুত্ব তুলে ধরে।
এই সূক্ষ্ম পরিবর্তনগুলি বোঝা নিশ্চিত করে যে বিকাশকারীরা আধুনিক সরঞ্জামগুলির সাথে খাপ খাইয়ে কার্যকরভাবে উত্তরাধিকার বাইনারিগুলি পরিচালনা করতে পারে৷ এটি আরও আন্ডারস্কোর করে কিভাবে ছোট বিবরণ যেমন ফিল্ডের ধরন প্রোগ্রামিং-এ কর্মক্ষমতা এবং নির্ভরযোগ্যতাকে প্রভাবিত করে। 🚀
IMAGE_DOS_HEADER বিশ্লেষণের জন্য উৎস এবং তথ্যসূত্র
- বিস্তারিত IMAGE_DOS_HEADER কাঠামো এবং এর ক্ষেত্রগুলি অফিসিয়াল মাইক্রোসফ্ট ডেভেলপার নেটওয়ার্ক ডকুমেন্টেশন থেকে উল্লেখ করা হয়েছে। ভিজিট করুন: PE বিন্যাস স্পেসিফিকেশন .
- মধ্যে পার্থক্য মধ্যে অন্তর্দৃষ্টি DWORD এবং দীর্ঘ স্ট্যাক ওভারফ্লোতে উপলব্ধ বিভিন্ন আলোচনা এবং সংস্থান থেকে প্রকারগুলি উদ্ভূত হয়েছিল। ভিজিট করুন: স্ট্যাক ওভারফ্লো .
- ঐতিহাসিক প্রেক্ষাপট এবং Windows SDK শিরোনাম সম্পর্কে সিস্টেম-নির্দিষ্ট বিশদ বিবরণ ওপেন সোর্স কমিউনিটি ফোরামে নিবন্ধের মাধ্যমে জানানো হয়েছে। ভিজিট করুন: ওএসডিভ উইকি .
- বাইনারি পার্সিং কৌশল এবং সরঞ্জামগুলির আরও প্রযুক্তিগত তথ্য পাইথনের স্ট্রাকট মডিউল ডকুমেন্টেশন থেকে নেওয়া হয়েছিল। ভিজিট করুন: পাইথন স্ট্রাকট ডকুমেন্টেশন .