DHEX(1) General Commands Manual DHEX(1)

dhex — ویرایشگر هگزادسیمال با حالت مقایسه (diff)

dhex [-x] dhex [-h] [-v] [-g] [-k] [-ab -ad -ah -ao base address] [-f config-file] [-m marker-file] [-ob -od -oh -oo offset] [-r searchlog] [-sa -sab string (ascii)] [-sh -shb string (hex)] [-w searchlog] [file] dhex [-h] [-v] [-g] [-k] [-a1b -a1d -a1h -a1o base address 1] [-a2b -a2d -a2h -a2o base address 2] [-cb] [-cd upper-limit] [-cl] [-f config-file] [-m marker-file] [-o1b -o1d -o1h -o1o offset1] [-o2b -o2d -o2h -o2o offset2] [-r1 searchlog1] [-r2 searchlog2] [-s1a -s1ab -s1h -s1hb string (ascii/hex)] [-s2a -s2ab -s2h -s2hb string (ascii/hex)] [-w1 searchlog1] [-w2 searchlog2] [file1 file2]

dhex یک ویرایشگر هگزادسیمال (hex) است. می‌توان از آن برای تغییر بایت‌های منفرد در فایل‌های بزرگ استفاده کرد. از آنجا که این برنامه در حالت متنی و مبتنی بر ncurses است، می‌تواند در سناریوهای متعددی اجرا شود. ویژگی خاص آن حالت مقایسه (diff) است: با استفاده از آن، کاربر ابزاری بصری برای مقایسه فایل‌ها در اختیار دارد. این حالت زمانی فراخوانی می‌شود که dhex به جای یک فایل، با دو فایل به عنوان پارامتر فراخوانی شود.

تمامی گزینه‌ها به کوچک و بزرگ بودن حروف حساس نیستند و می‌توان آن‌ها را با حروف کوچک یا بزرگ وارد کرد.

-ad -ah -ao base address
پس از بارگذاری یک فایل، هر نشانی یک نشانی پایه غیر از ۰ دریافت می‌کند. با این کار، کار کردن با رونوشت‌های حافظه جزئی آسان‌تر می‌شود. نشانی پایه را می‌توان به صورت دودویی (باینری) با [-ab] ، دهدهی (دسیمال) با [-ad] ، شانزده‌شانزدهی (هگزادسیمال) با [-ah] یا هشت‌هشتی (اکتال) با [-ao] مشخص کرد.
-a1d -a1h -a1o base address 1
 
-a2d -a2h -a2o base address 2
برای حالت diff، می‌توان دو نشانی پایه مختلف تعیین کرد. همانند قبل، یک نشانی دودویی را می‌توان با [-a1b -a2b] ، دهدهی با [-a1d -a2d] ، شانزده‌شانزدهی با [-a1h -a2h] یا هشت‌هشتی با [-a1o -a2o] مشخص کرد.

این نشانی پایه در فایل‌های نشانه‌گذار و همچنین گزارش‌های جستجو (searchlogs) محاسبه می‌شود.

-cl
فقط در حالت diff: فایل‌های ورودی را می‌توان از طریق خط فرمان با بهترین تطابق -cb یا طولانی‌ترین تطابق -cl همبسته کرد. این کار بسیار کند است.
upper-limit
فقط در حالت diff: فایل‌های ورودی را می‌توان از خط فرمان با کمترین اختلاف همبسته کرد. برای بهبود سرعت همبستگی، می‌توان یک حد بالا تعیین کرد.
configfile
معمولاً فایل .dhexrc از پوشه خانگی کاربر خوانده می‌شود. با این پارامتر، هر فایل پیکربندی دیگری را می‌توان بارگذاری کرد. برای توضیحات مربوط به قالب فایل، dhexrc(5) را ببینید.
نمایش مجوز برنامه
راه‌اندازی ماشین‌حساب هگز (hexcal)
نمایش صفحه راهنما
راه‌اندازی دستی پیکربندی صفحه‌کلید پیش از بارگذاری هر فایلی. این مورد هنگام فراخوانی dhex از یک ترمینال نامعمول بسیار مفید است.
markerfile
در dhex می‌توان نشانک‌ها (bookmarks) را تنظیم کرده و برای استفاده‌های بعدی در یک markerfile ذخیره نمود. با این پارامتر، markerfile در زمان شروع خوانده می‌شود و نیاز به خواندن بعدی آن‌ها از طریق رابط گرافیکی را برطرف می‌کند. قالب فایل آن‌ها در dhex_markers(5) توصیف شده است.
-od -oh -oo offset
پس از بارگذاری فایل، مکان‌نما روی ۰ تنظیم شده و صفحه اول بایت‌ها روی صفحه نمایش داده می‌شود. با یکی از این پارامترها می‌توان از هر نقطه دیگری در فایل شروع کرد. موقعیت مکان‌نما را می‌توان به صورت یک عدد دودویی با [-ob] ، دهدهی با [-od] ، شانزده‌شانزدهی با [-oh] یا هشت‌هشتی با [-oo] مشخص کرد.
-o1d -o1h -o1o offset1
 
-o2d -o2h -o2o offset2
برای حالت diff، می‌توان دو موقعیت مکان‌نمای مختلف را در زمان شروع تعیین کرد. باز هم موقعیت‌های مکان‌نما می‌توانند به صورت عدد دودویی با [-o1b -o2b] ، دهدهی با [-o1d -o2d] ، شانزده‌شانزدهی با [-o1h -o2h] یا هشت‌هشتی با [-o1o -o2o] داده شوند.

بدین ترتیب، چند بایت اول فایل نادیده گرفته می‌شوند و تنها بقیه فایل مقایسه می‌گردد.

searchlog
هنگام جستجو از خط فرمان، آفست‌ها از این گزارش جستجو خوانده می‌شوند. قالب آن در dhex_searchlog(5) شرح داده شده است.
searchlog1
 
searchlog2
هنگام جستجو در دو فایل به طور هم‌زمان، آفست‌ها را می‌توان از دو گزارش جستجوی متفاوت خواند.
-sab -sh -shb string
به جای تنظیم آفست مکان‌نما بر روی یک مقدار مطلق، می‌توان یک رشته خاص را از خط فرمان جستجو کرد. اگر یک [-ob -od -oh -oo offset] اضافی وجود داشته باشد، جستجو از آنجا شروع خواهد شد. خواندن و نوشتن گزارش‌های جستجو به ترتیب با [-r searchlog] و [-w searchlog] امکان‌پذیر است. با [-sa string] رشته به صورت ASCII تفسیر می‌شود. [-sh string] آن را به صورت hex تفسیر می‌کند. برای جستجوی رو به عقب، می‌توان از [-sab string] یا [-shb string] استفاده کرد.
-s1ab -s1h -s1hb string1
 
-s2ab -s2h -s2hb string2
در حالت diff، امکان جستجوی هم‌زمان برای دو رشته در دو فایل وجود دارد.
چاپ نسخه dhex.
searchlog
هنگام جستجو از خط فرمان، نتایج را در این گزارش جستجو بنویس و خارج شو. این گزارش در قالبی نوشته می‌شود که در dhex_searchlog(5) توصیف شده است.
searchlog1
 
searchlog2
هنگام جستجو در دو فایل به طور هم‌زمان، نتایج هر دو جستجو را در این فایل‌های گزارش بنویس.

منوها دارای کلیدهای میانبر هستند و با رنگ متفاوتی نمایش داده می‌شوند. برای جابه‌جایی از یک آیتم منو به آیتم بعدی، می‌توان از کلیدهای جهت‌نما یا کلید TAB استفاده کرد.

فیلدهای ورودی را می‌توان با فشردن ESC، ENTER یا هر کلید جهت‌نما بست. تنها با فشردن ESC تغییرات اعمال‌شده در آن‌ها ذخیره نخواهد شد.

هنگام اجرای dhex برای نخستین بار، بدون وجود هرگونه فایل پیکربندی یا با پارامتر -k، نخستین صفحه‌ای که نمایش داده می‌شود صفحه پیکربندی صفحه‌کلید است. در این صفحه، برنامه از کاربر می‌خواهد کلیدهای مشخصی را فشار دهد؛ به ترتیب: ESCAPE، F1، F2، F3، F4، F5، F6، F7، F8، F9، F10، BACKSPACE، DEL، ENTER، TAB، بالا، پایین، راست، چپ، PG UP، PG DOWN، HOME و END. همچنین به کاربر اطلاع می‌دهد که قصد دارد بعداً چه استفاده‌ای از این کلیدها داشته باشد تا کاربر بتواند در مورد هر جایگزینی که ترجیح می‌دهد تصمیم بگیرد. اگر کاربر نخواهد عملکرد خاصی را به یک کلید معین اختصاص دهد، می‌تواند به سادگی ESCAPE را فشار داده و به پرسش بعدی برود.

پس از فشردن تمامی کلیدها، کاربر می‌تواند انتخاب کند که آیا این کلیدها در فایل پیکربندی نوشته شوند یا خیر.

صفحه اصلی به سه ستون تقسیم شده است: ستون نخست شامل آفست (موقعیت) درون فایل برای خط جاری است. ستون دوم حاوی بایت‌های فایل در قالب hex است. در نهایت، ستون سوم همان بایت‌ها را در قالب ascii نمایش می‌دهد. اگر بایتی قابل چاپ نباشد، با '.' جایگزین می‌شود. تعداد بایت‌های نمایش‌داده‌شده در هر خط به عرض ترمینال بستگی دارد. به عنوان مثال، اگر ترمینال ۸۰ کاراکتر عرض داشته باشد، ۱۶ بایت در هر خط نمایش داده می‌شود.

اگر هیچ پارامتر [-o] یا [-a] دیگری در زمان شروع مشخص نشده باشد، مکان‌نما روی آفست ۰ تنظیم می‌شود و در ستون hex نیز نمایش داده می‌شود. در اینجا می‌توان آن را با کلیدهای جهت‌نما حرکت داد. با وارد کردن یک عدد هگزادسیمال، فایل ویرایش می‌شود. فایل را می‌توان در ستون ascii نیز ویرایش کرد، فقط با فشردن کلید TAB (یا هر کلیدی که در تنظیمات صفحه‌کلید جایگزین آن شده است). فشردن مجدد TAB مکان‌نما را به ستون hex بازمی‌گرداند. فشردن F9 (یا جایگزین آن) آخرین تغییرات را لغو (undo) می‌کند. تغییرات با رنگ متفاوتی نمایش داده می‌شوند.

ویرایش در حالت diff امکان‌پذیر نیست. در این حالت، فشردن کلیدهای جهت‌نما هر دو فایل را به طور هم‌زمان حرکت می‌دهد.

فشردن F1 (یا جایگزین آن) صفحه Goto... را باز می‌کند. در اینجا می‌توان بدون نیاز به پیمایش با کلیدهای جهت‌نما، مستقیماً به یک نشانی مشخص پرش کرد. نشانی را می‌توان در فیلد 'To' به صورت مطلق یا نسبی (برای جهش از روی مقدار مشخصی از بایت‌ها) وارد کرد. یک نشانی مطلق با فشردن '=' و یک نشانی نسبی با فشردن '+' یا '-' به ترتیب برای جهش رو به جلو یا عقب انتخاب می‌شود. صرف‌نظر از حالت آدرس‌دهی، مقدار باید به صورت یک عدد هگزادسیمال وارد شود.

همچنین می‌توان تا ده نشانک (bookmark) در این صفحه تنظیم کرد: فشردن '0'...'9' یکی از آن‌ها را انتخاب می‌کند. حرکت مکان‌نما به "Set" و فشردن ENTER یکی از آن نشانک‌ها را تغییر می‌دهد. فیلدهای "Diff:" تفاوت بین موقعیت فعلی مکان‌نما و نشانک را نشان می‌دهند.

نشانک‌ها را می‌توان ذخیره و بارگذاری کرد، برای این منظور گزینه‌های "Save Markers" و "Load Markers" در پایین صفحه قرار دارند. با انتخاب یکی از آن‌ها، از کاربر نام فایل درخواست می‌شود. می‌توان در زمان راه‌اندازی با ارائه پارامتر [-m markerfile] یک فایل نشانه‌گذار را بارگذاری کرد. dhex_markers(5) قالب فایل‌های نشانه‌گذار را توصیف می‌کند.

فشردن F2 (یا جایگزین آن) صفحه Search... را باز می‌کند. در اینجا می‌توان یک رشته کوتاه وارد کرد (به صورت hex یا ascii). اگر فایل گزارشی انتخاب نشده باشد، مکان‌نما پس از انتخاب "Go" به رخداد بعدی این رشته جستجو پرش می‌کند. می‌توان انتخاب کرد که جستجو رو به جلو انجام شود یا رو به عقب.

برای رفتن به رخداد بعدی باید F3 (یا جایگزین آن) فشرده شود. برای رفتن به رخداد قبلی باید F4 فشرده شود. خود جستجو در مرزهای فایل چرخش دارد، به این معنی که با رسیدن به انتهای فایل از ابتدا شروع می‌شود و بالعکس.

گزارش‌های جستجو (searchlogs) روشی پیشرفته برای جستجو هستند: نوشتن در گزارش جستجو مکان‌نما را از یک رخداد به رخداد بعدی حرکت نمی‌دهد، بلکه در عوض، آفست‌های تمامی آن‌ها را در فایل گزارش می‌نویسد. قالب آن‌ها در dhex_searchlog(5) توصیف شده است.

خواندن از این گزارش جستجو به این معنی است که جستجو تمام فایل را در بر نمی‌گیرد: تنها نشانی‌هایی که در این فایل ارائه شده‌اند مورد جستجو قرار می‌گیرند. بدین ترتیب می‌توان تغییرات خاصی را جستجو کرد؛ مانند تعداد جان‌های ذخیره‌شده در فایل ذخیره یک بازی. dhex_searchlog(5) قالب گزارش جستجو را توصیف می‌کند.

فشردن F5 (یا جایگزین آن) یک ماشین‌حساب کوچک ۶۴ بیتی را باز می‌کند. این ماشین‌حساب علاوه بر انجام محاسبات حسابی (+, -, *, /, باقی‌مانده)، قادر به انجام عملیات منطقی (and, or, xor, shift) نیز می‌باشد. سه ستون برای وارد کردن اعداد به صورت هگزادسیمال، دهدهی یا دودویی وجود دارد. فشردن 'x' این صفحه را می‌بندد. استفاده از آرگومان خط فرمان [-x] آن را از خط فرمان راه‌اندازی می‌کند.

هنگامی که dhex(1) در حالت diff اجرا می‌شود، فشردن F6 (یا جایگزین آن) کادر گفتگوی همبستگی فایل را باز می‌کند. این بخش تلاش می‌کند تا آفست بهینه بین دو فایل را پیدا کند. سه الگوریتم برای یافتن این آفست وجود دارد: جستجو برای بهترین تطابق (بیشترین تعداد بایت‌های یکسان ممکن)، طولانی‌ترین تطابق (بیشترین تعداد بایت‌های متوالی یکسان ممکن)، یا کمترین اختلاف (کمترین اختلاف ممکن بین بایت‌ها).

اگرچه در ابتدا ممکن است یکسان به نظر برسند، اما در عمل جستجو برای کمترین اختلاف سریع‌تر است. این سرعت حتی می‌تواند بیشتر شود اگر کاربر یک حد بالای اختلاف تعیین کند.

با انتخاب Go، برنامه به دنبال آفست بهینه خواهد گشت. این کار مقداری زمان خواهد برد.

فشردن F10 (یا جایگزین آن) برنامه dhex را می‌بندد. در صورتی که تغییراتی در فایل اعمال شده باشد، کادر گفتگوی ذخیره باز می‌شود. در اینجا می‌توان انتخاب کرد که آیا تغییرات در فایل بازنویسی شوند یا خیر.

$HOME/.dhexrc: مسیر پیش‌فرض فایل پیکربندی. اگر متغیر $HOME تنظیم نشده باشد، مسیر آن باید به صورت دستی مشخص شود.

گزارش باگ‌ها به ⟨dettus@dettus.net⟩. حتماً عبارت DHEX را در عنوان ایمیل درج کنید.

نوشته شده توسط Thomas Dettbarn

dhexrc(5), dhex_markers(5), dhex_searchlog(5)

January 19, 2019 Linux 6.12.107+deb13-amd64