কোনও ফাইলের পরিবর্তে এসটিডিএন থেকে পঠন করার জন্য কি উপায় আছে?


8

আমার নির্দিষ্ট ক্ষেত্রে, আমি যা ডাম্প করতে এটি ব্যবহার করতে চাই echo
আমি যেকোনো ফাইল জড়িত চাই না ...
একটি উপায় আছে করা objdumpথেকে পড়া STDINপরিবর্তে?


আপনি কি আপনার পরিস্থিতিটি আরও কিছুটা ব্যাখ্যা করতে পারেন?
কোয়ান্টা

উত্তর:


5

আপনি সবসময় করতে পারেন

objdump -d /dev/stdin < t2.o

অথবা

cat t2.o | objdump -d /dev/stdin

নমুনা

[মূল @ মাইহোস্ট সিসি] # আপজডাম্প-এইচ / দেব / স্টিডিন <t2.o

/ dev / stdin: ফাইলের ফর্ম্যাটটি Elf64-x86-64

বিভাগগুলি: আইডেক্স নামের আকারের ভিএমএ এলএমএ
ফাইল অ্যালগন 0। গোষ্ঠী 00000008 00000000000000000000000000000000000000000040 2 ** 2 বিষয়বস্তু, পুনরায়, সমাপ্তি, গ্রুপ, লিঙ্কপোটিসি_ডিসকার্ড


1
cat t2.o | objdump -d /dev/stdinকাজ করে না. /dev/stdinশুধুমাত্র যখন এটি একটি বাস্তব ফাইলের সাথে সম্পর্কিত হয় তখনই কাজ করে। যেহেতু আপনার দ্রবণটির জন্য সেই ফাইলটির উপস্থিতি প্রয়োজন, এটি অপের উত্তর দেয় না।
ড্রাগনরুট

এটি objdumpবিশেষত এই অনুরোধের জন্য কাজ করতে পারে seekতবে ফাইলটিতে অপারেশন করার ক্ষেত্রে এটি অন্যদের জন্য ব্যর্থ হতে পারে । যখন সরঞ্জামগুলিতে -স্টিডিন না থাকে , তখন প্রায়শই এটি ঘটে।
সিওরো সান্তিলি 冠状 病毒 审查 六四 事件

5

আপনি পারবেন না। এর আশেপাশে কোনও উপায় নেই, আপনাকে অস্থায়ী ফাইলটি ব্যবহার করতে হবে।

উত্স ফাইল রিডফেল.সি. ফাইলটি খোলার চেষ্টা করার আগে এই শর্তহীন চেক (কমপক্ষে 2.22-8-এ অন্তর্ভুক্ত) রয়েছে:

if (! S_ISREG (statbuf.st_mode))
    {
      error (_("'%s' is not an ordinary file\n"), file_name);
      return 1;
    }

তাই আপনি যদি ফাইল কিছু কিন্তু নিয়মিত ফাইল (সিমবলিক লিঙ্ক মত, অথবা গৃহস্থালির কাজ ডিভাইসের ক্ষেত্রে যেমন /dev/stdin, /proc/self/fd/*ইত্যাদি) এটা কাজ করবে না।

বিকল্পভাবে, আপনি উত্সটি সংশোধন করতে এবং পরিবর্তিত অবজডাম্প ব্যবহার করতে পারেন, তবে আপনার বহনযোগ্যতা আছে।


0

এক ধরণের ওয়ার্কারআউন্ড ব্যবহার করছে tee। সুতরাং একটি ফাইল নামকরণ inputব্যবহার বিচ্ছিন্ন করতে

cat input | tee a.out | objdump -d

এবং, echoকমান্ডটি দিয়ে কিছু বাইট পাস করার জন্য উদাহরণ দেওয়ার জন্য , নিম্নলিখিতটি একটি ভাল উদাহরণ হওয়া উচিত (প্যারামিটারগুলি এই ভাল এসও উত্তরে বর্ণিত হয়েছে ):

X86 কোড বাইট সিকোয়েন্সকে পৃথক করা যায়

b8 01 00 00 00 bb 0a 00 00 00 cd 80

এটির সাথে উপসর্গ 0:এবং কমান্ডটি ব্যবহার করুন

echo "0: b8 01 00 00 00 bb 0a 00 00 00 cd 80" | xxd -r | tee a.out | objdump -D -Mintel,i386 -b binary -m i386

এটির ফলাফল:

a.out:     file format binary
Disassembly of section .data:
00000000 <.data>:
   0:   b8 01 00 00 00          mov    eax,0x1
   5:   bb 0a 00 00 00          mov    ebx,0xa
   a:   cd 80                   int    0x80

প্রস্থান কোড 0xA সহ একটি আই 386 লিনাক্স প্রোগ্রামটি প্রস্থান করার জন্য যা কেবল সমাবেশের কোড।

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