最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Linux?VIM編輯二進(jìn)制文件方式

 更新時(shí)間:2023年08月26日 09:00:00   作者:sunny_98_98  
這篇文章主要介紹了Linux?VIM編輯二進(jìn)制文件方式,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

Linux VIM編輯二進(jìn)制文件

在vim下面編輯二進(jìn)制的方式如下:

vim -b binary_file

-b 這個(gè)參數(shù)設(shè)定了 ‘binary’ 選項(xiàng)。

然后輸入:

:%!xxd

這個(gè)命令把文件內(nèi)容以常見的字節(jié)偏移 十六進(jìn)制 ASCII碼的版面顯示

然后輸入R進(jìn)入改寫模式,即可按照版面格式進(jìn)行編輯。

注意:只有十六進(jìn)制部分的修改才會被采用。右邊ASCII文本部分的修改無效。

編輯完成以后,輸入:

:%!xxd -r

這個(gè)命令把剛才的編輯格式轉(zhuǎn)換會原始文本格式。

再輸入:wq保存退出即可完成對二進(jìn)制文件的修改。

vim編輯修改二進(jìn)制文件以及對于二進(jìn)制文件中幻數(shù)測試

講述我在學(xué)習(xí)反匯編時(shí)遇到的關(guān)于編輯二進(jìn)制文件的問題。

編輯環(huán)境:Ubuntu + vim

我測試的文件是一個(gè)可執(zhí)行文件,也就是通過c程序編譯之后生成的,這里附上我測試的時(shí)候使用的程序代碼:

//assert.c
//代碼出自《C primer plus》
#include <stdio.h>
#include <assert.h>
#include <math.h>
int main(){
	double x, y, z;
	puts("Enter a pair of numbers (0 0 to quit):");
	while(scanf("%lf%lf", &x, &y) == 2 && (x != 0 || y != 0)){
		z = x * x - y * y;
		assert(z >= 0);
		printf("answer is %f\n", sqrt(z));
		puts("Next pair of numbers: ");
	}
	puts("Done");
	return 0;
}

使用如下命令進(jìn)行編譯,這里的“-lm”是因?yàn)樾枰溄訑?shù)學(xué)庫,否則會報(bào)錯(cuò)undefine:

gcc assert.c -o a -lm
gcc assert.c -o assert -lm

分別執(zhí)行上述兩條命令后可以產(chǎn)生a和assert兩個(gè)文件(這里為什么要生成兩個(gè)一樣的文件在后文有解釋)這里我們使用file命令查看一下文件的類型,為FLE類型:

file assert

隨后,使用vim打開assert文件,這里的-b表示打開的是二進(jìn)制文件:

vim -b assert.c

在vim中開啟命令模式,通過如下命令,可以以十六進(jìn)制形式顯示:

%!xxd

測試:將ELF幻數(shù)替換為MS-DOS的可執(zhí)行文件幻數(shù),即4d5a

這里我演示一下我曾經(jīng)犯過的錯(cuò)誤,在修改結(jié)束后我直接wq關(guān)閉文件,這時(shí)候我使用file命令查看文件的類型,得到了如下的內(nèi)容:

也就是 assert:ASCII text,并不是我想要的MS-DOS內(nèi)容,為了測試這種編輯操作是否會對原本的文件產(chǎn)生影響,我們再使用上述方式將assert文件的前兩個(gè)字節(jié)改回到7f45,wq保存。

這時(shí)用到a文件,將a文件和改回原內(nèi)容的assert文件進(jìn)行比較:

cmp a assert

使用上述命令之后可以看到兩個(gè)文件并不一樣,也就說明直接更改是不行的

這時(shí)可能意識到命令使用錯(cuò)誤,經(jīng)過一番查找,在使用%!xxd命令進(jìn)行更改二進(jìn)制文件后,需要使用%!xxd -r命令進(jìn)行還原(在vim命令模式下輸入),否則會造成錯(cuò)誤:

%!xxd -r

再次使用上述更改步驟,可以得到正確的結(jié)果,可以看到assert文件被更改為MS-DOS文件:

總結(jié):上述的內(nèi)容是我個(gè)人在遇到問題時(shí)候的解決過程,供大家避雷,總結(jié)下來也就是幾條命令的事:

vim -b xxx(文件名)
%!xxd 
%!xxd -r

這里附加幾個(gè)幻數(shù),供大家測試:

complied Java class: cafe babe
MS-DOS executable: 4d5a

JPEG: 這里面需要改固定的幾個(gè)位置,第1,2字節(jié)改為ffd8,7,8,9,10字節(jié)改為4a,46,49,46,其他字節(jié)不需要修改,任何都可以。

最后

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Linux被中斷的系統(tǒng)如何調(diào)用詳解

    Linux被中斷的系統(tǒng)如何調(diào)用詳解

    這篇文章主要給大家介紹了關(guān)于Linux被中斷的系統(tǒng)如何調(diào)用的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用Linux具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-10-10
  • CentOS7使用dnf安裝mysql的方法

    CentOS7使用dnf安裝mysql的方法

    本篇文章主要介紹了CentOS7使用dnf安裝mysql的方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-03-03
  • 如何解決Linux下Too many open files問題

    如何解決Linux下Too many open files問題

    Too many open files是Linux系統(tǒng)中常見的錯(cuò)誤,從字面意思上看就是說程序打開的文件數(shù)過多,不過這里的files不單是文件的意思,也包括打開的通訊鏈接(比如socket),正在監(jiān)聽的端口等等,所以有時(shí)候也可以叫做句柄(handle),這個(gè)錯(cuò)誤通常也可以叫做句柄數(shù)超出系統(tǒng)限制。
    2021-06-06
  • 使用Apache ab工具對Apache服務(wù)器進(jìn)行簡單的壓力測試

    使用Apache ab工具對Apache服務(wù)器進(jìn)行簡單的壓力測試

    這篇文章主要介紹了使用Apache ab工具對Apache服務(wù)器進(jìn)行簡單的壓力測試的方法,文中還對如何查看當(dāng)前Apache的連接數(shù)的方法作了介紹,需要的朋友可以參考下
    2016-03-03
  • 虛擬機(jī)Linux橋接模式下設(shè)置靜態(tài)IP詳解

    虛擬機(jī)Linux橋接模式下設(shè)置靜態(tài)IP詳解

    這篇文章主要介紹了虛擬機(jī)Linux橋接模式下設(shè)置靜態(tài)IP詳解,小編覺得還是挺不錯(cuò)的,具有一定借鑒價(jià)值,需要的朋友可以參考下
    2018-01-01
  • 解決linux下zip文件解壓亂碼問題

    解決linux下zip文件解壓亂碼問題

    本篇文章主要介紹了解決linux下zip文件解壓亂碼問題,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。
    2017-05-05
  • Linux內(nèi)核宏Container_Of的詳細(xì)解釋

    Linux內(nèi)核宏Container_Of的詳細(xì)解釋

    我們在分析Linux內(nèi)核鏈表的時(shí)候注意到內(nèi)核在求解結(jié)構(gòu)體偏移的時(shí)候巧妙的使用了container_of宏定義,本文我們就來詳細(xì)剖析下內(nèi)核到底是如何求解結(jié)構(gòu)體成員變量的地址的
    2021-09-09
  • Linux清理服務(wù)器磁盤空間的方法

    Linux清理服務(wù)器磁盤空間的方法

    本文介紹了清理服務(wù)器磁盤空間的方法,首先,使用命令分析磁盤狀態(tài),找出占用空間大的目錄和文件,然后將不需要的文件移至其他掛載點(diǎn)或刪除,最后,清理系統(tǒng)日志記錄,騰出更多空間,需要的朋友可以參考下
    2026-04-04
  • Linux中配置DNS正向解析

    Linux中配置DNS正向解析

    本文介紹了如何配置DNS正向解析,包括編輯named.conf文件、abc.zone文件和啟動服務(wù),配置中需注意文件格式和權(quán)限設(shè)置,實(shí)驗(yàn)通過配置DNS服務(wù)器實(shí)現(xiàn)域名到IP的解析,這對網(wǎng)絡(luò)管理和維護(hù)非常重要,關(guān)閉防火墻和設(shè)置SELinux為disabled是實(shí)驗(yàn)的基礎(chǔ)環(huán)境配置,通過實(shí)驗(yàn)
    2024-09-09
  • Linux系統(tǒng)下gitee使用git提交代碼方式

    Linux系統(tǒng)下gitee使用git提交代碼方式

    這篇文章主要介紹了如何在Linux系統(tǒng)中安裝和配置Git,如何生成SSH密鑰并將其添加到GitHub或Gitee賬戶,以及如何將本地項(xiàng)目推送到Gitee遠(yuǎn)程倉庫的步驟
    2026-01-01

最新評論

吉木乃县| 丰顺县| 综艺| 余干县| 保定市| 明光市| 鄂托克前旗| 陆良县| 九龙城区| 凌云县| 日土县| 滦南县| 丰县| 汾阳市| 庆城县| 共和县| 新源县| 沙雅县| 台北县| 团风县| 宜都市| 双桥区| 黎川县| 中西区| 琼海市| 佛冈县| 绥阳县| 唐河县| 四子王旗| 禄丰县| 芜湖市| 洪雅县| 邵阳市| 罗江县| 隆尧县| 新野县| 镇巴县| 北票市| 都昌县| 大冶市| 托里县|