হেক্সডাম্প বনাম এক্সএক্সডি ফর্ম্যাট পার্থক্য


9

আমি কীভাবে বিপরীত হেক্সডাম্প করব এবং সন্ধান পেয়েছি xxd উল্লেখ করেছি। তবে, এটি সহজভাবে কাজ করবে বলে মনে হয় না:

xxd -r hexdumpfile > binaryfile

আমি তখন আউটপুট xxd infileএবং আউটপুটগুলির মধ্যে পার্থক্যটি তুলনা করেছি hexdump infileএবং তিনটি পার্থক্য পেয়েছি:

  1. xxd আউটপুট ঠিকানার পরে একটি কোলন রয়েছে
  2. 5a42এক্সএক্সডি আউটপুটটির বিপরীত তথ্যে অবস্থান রয়েছে (উদাহরণস্বরূপ, হেক্সডাম্প আউটপুট এক্সএক্সডি আউটপুটে পরিণত 425aহয়)
  3. প্রতিটি লাইনের পরে কিছু অতিরিক্ত অক্ষর রয়েছে

আমার কাছে কেবল একটি সার্ভারে কিছু নির্দিষ্ট ফাইলের হেক্সডাম্পড সংস্করণ রয়েছে। আমি কীভাবে xxd ব্যবহার করে বাইনারি ডেটা সঠিকভাবে ফিরে পেতে পারি?


হ্যাক্সডাম্প ফর্ম্যাটে নিতে এক্সএক্সডিতে কিছু বিকল্পের সন্ধান করছিল, তবে আপাতত কিছু সাধারণ
সেড

আপনি যা জিজ্ঞাসা করেছেন তা আমি সত্যিই পরীক্ষা করে দেখিনি, তবে xxd -p এবং -b চেষ্টা করুন, -p সরল -b বাইনারি, পাশাপাশি আপনার -r। বাইট অর্ডার হিসাবে, এটি বড় এন্ডিয়ান এবং সামান্য এন্ডিয়ান নিয়ে কাজ করবে এবং এক্সএক্সডি এটির বিপরীত হতে পারে না .. তবে এটি কীভাবে ফাইলগুলিতে বাইট সংরক্ষণ করা হয় তার সাথে সম্পর্কিত L লাইক, যদি আপনার নোটপ্যাডে একটি পাঠ্য ফাইল থাকে , আপনি এটি ইউনিকোড 16-বিট বিগ এন্ডিয়ান বা সামান্য এডিয়ান বা ইউটিএফ -8 বা যে কোনও কিছু হিসাবে সংরক্ষণ করতে পারেন এবং আপনি এক্সএক্সডি থেকে পার্থক্য দেখতে পাচ্ছেন। Od কমান্ড এটি অন্যভাবে প্রদর্শন করতে পারে।
বারলপ

ভবিষ্যতের রেফারেন্সের জন্য, hexdumpআপনাকে এর আউটপুটে ব্যবহৃত অন্তর্নিয়াস চয়ন করতে দেয় যা এটি আরও সহজ করে তুলতে পারে। (এখন কেন? আপনার প্রশ্নটি সম্পর্কিত নয় এমন কোনও
কিছুর

উত্তর:


7

আমি জানলাম এমন কোনও কমান্ড নেই যে আমি রূপান্তরটি করব, তবে এটি সহজেই কয়েকটি ধাপে বিভক্ত হতে পারে:

  1. hexdumpআউটপুট ব্যবহার করে ঠিকানাগুলি স্ট্রিপ করুনsed
  2. ব্যবহার করে বাইনারি রূপান্তর করুন xxd
  3. এন্ডিয়ান রূপান্তর (উদাহরণস্বরূপ, 5a42হয়ে 425a) ব্যবহার করেdd

এখানে সম্পূর্ণ আদেশ:

sed 's/^[0-9]*//' hexdump | xxd -r -p | dd conv=swab of=binaryfile


1

এই উত্তরটি https://stackoverflow.com/a/52834021/6770384 থেকে ক্রস পোস্ট

আপনি একটি sedকমান্ডে রূপান্তর করতে পারেন । এটি :ঠিকানার পরে ঠিকানা যুক্ত করতে এবং আধ্যাত্মিকতা পরিবর্তন করতে (স্যুইচিং ab12করা 12ab) যথেষ্ট ।

sed -E 's/ /: /;s/ (..)(..)/ \2\1/g;$d' dump | xxd -r

জ্ঞাত বাগ (মন্তব্য বিভাগ দেখুন)

  • মূল ফাইলটি বিজোড় দৈর্ঘ্যের (উদাহরণস্বরূপ 1, 3, 5, 7, ..., বাইট দীর্ঘ) হলে একটি অনুসরণযোগ্য নাল বাইট যুক্ত করা হয়।
  • মূল ফাইলটির পুনরাবৃত্তি বিভাগগুলি যদি hexdumpএ ব্যবহার করে সম্পাদনা করা  হত তবে সঠিকভাবে পুনরুদ্ধার করা হবে না *


@ স্মারলিঙ্ক এই পর্যবেক্ষণের জন্য আপনাকে ধন্যবাদ! আপনি ঠিক বলেছেন: এই কমান্ডটি একটি ট্রিলিং নাল বাইট তৈরি করে যা মূল ফাইলে ছিল না যদি বাইটের দৈর্ঘ্য একটি বিজোড় সংখ্যা ছিল। আমি আরও একটি বাগ খুঁজে পেয়েছি। hexdumpএকটি ব্যবহার করে পুনরাবৃত্তি অংশ আড়াল করতে পারে *। এই কমান্ডটি এই অংশগুলি সঠিকভাবে পুনরুদ্ধার করতে পারে না। উদাহরণ: 100 এর পরিবর্তে yes | head -n100 | hexdump | sed -E 's/ /: /;s/ (..)(..)/ \2\1/g' | xxd -r8 টি প্রিন্ট করে ythese এই জিনিসগুলি স্থির করার জন্য এই ওয়ান-লাইনারের চেয়ে বেশি প্রয়োজন। ভবিষ্যতে আমি আরও একটি স্ক্রিপ্ট যুক্ত করব।
সোকোইই

*টিপ জন্য ধন্যবাদ , জানেন না!
স্মিটারলিঙ্ক
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.