日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

使用GCC生成无格式二进制文件(plain binary files)

發布時間:2023/12/18 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 使用GCC生成无格式二进制文件(plain binary files) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

使用C語言生成一個二進制文件

使用自己喜歡的文本編輯器寫一個test.c:

int main()

{

}

再使用如下命令編譯:

gcc –c test.c

ld –o test –Ttext 0x0 –e main test.o

objcopy –R .note –R .comment –S –O binary test test.bin

最后生成的二進制文件是test.bin,可以使用你喜歡的反匯編工具看看這個文件里到底是什么。我使用Linux下的objdump進行反匯編:

objdump –D –b binary –a i386 test.bin

結果如下:

00000000 <main>:

???0:??????????55????????????????????????push???%ebp

???1:??????????89 e5??????????????????????mov????%esp,%ebp

???3:??????????83 ec 08????????????????????sub????$0x8,%esp

???6:??????????83 e4 f0?????????????????????and????$0xfffffff0,%esp

???9:??????????b8 00 00 00 00????????????????mov????$0x0,%eax

???e:?29 c4??????????????????????sub????%eax,%esp

??10:??????????c9????????????????????????leave?

??11:??????????c3????????????????????????ret??

其中第一列是指令的內存地址;第二列是指令的機器碼;第三列是匯編指令。相信你的結果與此同。如果你的gcc與我的不一樣,例如2.7.x版本的gcc,你的結果很可能會有所不同,缺少如下的四條指令,這是正常的,這兩個版本的gcc所使用的堆棧框架不同(下面介紹的例子也會因為編譯器版本的不同造成其結果有別):

???3:??????????83 ec 08????????????????????sub????$0x8,%esp

???6:??????????83 e4 f0?????????????????????and????$0xfffffff0,%esp #堆棧對齊,以16Bytes為單位分配局部變量空間

???9:??????????b8 00 00 00 00????????????????mov????$0x0,%eax

???e:?29 c4??????????????????????sub????%eax,%esp

上述代碼都是32-bit代碼,你需要在像Linux這樣的?32-bit環境下運行,并且是保護模式。也可以只用下面的指令直接生成test.bin:

gcc –c test.c

ld –Ttext 0x0 –e main --oformat binary –o test.bin test.o

上面的test.c中只有一個函數,而且還只是個框架。其反匯編代碼也沒什么難理解的。

3.?????????編寫帶局部變量的程序

再創建一個新的test.c,看看gcc是如何處理局部變量的。

int main()

{

int i;

i=0x12345678;

}

使用上述兩種方法的人一種編譯,生成test.bin。然后使用objdump進行反匯編:

00000000 <main>:

???0:??????????55????????????????????????push???%ebp

???1:??????????89 e5??????????????????????mov????%esp,%ebp

???3:??????????83 ec 08????????????????????sub????$0x8,%esp

???6:??????????83 e4 f0?????????????????????and????$0xfffffff0,%esp

???9:??????????b8 00 00 00 00????????????????mov????$0x0,%eax

???e:?29 c4??????????????????????sub????%eax,%esp

??10:??????????c7 45 fc 78 56 34 12????movl???$0x12345678,0xfffffffc(%ebp)

??17:??????????c9????????????????????????leave?

??18:??????????c3????????????????????????ret

與第一個例子相比,開頭的六條指令和最后的兩條指令完全相同,僅有一條指令不同。這條語句是給局部變量賦值,其空間的分配在前面已經進行了。在gcc中,堆棧中的局部變量空間按16字節為單位進行分配,而不是通常的1字節為單位。如果將

int i;

i=0x12345678;

改為

int i=0x12345678;

其結果沒有區別。但是,如果是全局變量,就不一樣了。

4.?????????編寫帶全局變量的程序

將test.c改為:

int i;

int main()

{

i=0x12345678;

}

使用同樣的方法編譯,然后再進行反匯編:

00000000 <main>:

???0:??????????55????????????????????????push???%ebp

???1:??????????89 e5??????????????????????mov????%esp,%ebp

???3:??????????83 ec 08????????????????????sub????$0x8,%esp

???6:??????????83 e4 f0?????????????????????and????$0xfffffff0,%esp

???9:??????????b8 00 00 00 00????????????????mov????$0x0,%eax

???e:?29 c4??????????????????????sub????%eax,%esp

??10:??????????c7 05 1c 10 00 00 78???movl???$0x12345678,0x101c

??17:??????????56 34 12

??1a:?c9????????????????????????leave?

??1b:??????????c3????????????????????????ret???

我們定義的全局變量被放到了0x101c處,這是gcc默認以page-align對齊數據段的結果,此處的page與頁式內存管理中的page沒有關系。在使用ld鏈接時,使用-N參數可以關閉對齊效果。

00000000 <main>:

???0:??????????55????????????????????????push???%ebp

???1:??????????89 e5??????????????????????mov????%esp,%ebp

???3:??????????83 ec 08????????????????????sub????$0x8,%esp

???6:??????????83 e4 f0?????????????????????and????$0xfffffff0,%esp

???9:??????????b8 00 00 00 00????????????????mov????$0x0,%eax

???e:?29 c4??????????????????????sub????%eax,%esp

??10:??????????c7 05 1c 00 00 00 78???movl???$0x12345678,0x1c

??17:??????????56 34 12

??1a:?c9????????????????????????leave?

??1b:??????????c3????????????????????????ret?

正如我們看到的,數據段緊接著代碼段。我們也可以明確的指定數據段的位置,試試下面的命令再進行編譯:

gcc –c test.c

ld –Ttext 0x0 –Tdata 0x1234 –e main –N --oformat binary –o test.bin test.o

然后再使用objdump進行反匯編:

00000000 <.data>:

???0:??????????55????????????????????????push???%ebp

???1:??????????89 e5??????????????????????mov????%esp,%ebp

???3:??????????83 ec 08????????????????????sub????$0x8,%esp

???6:??????????83 e4 f0?????????????????????and????$0xfffffff0,%esp

???9:??????????b8 00 00 00 00????????????????mov????$0x0,%eax

???e:?29 c4??????????????????????sub????%eax,%esp

??10:??????????c7 05 34 12 00 00 78???movl???$0x12345678,0x1234

??17:??????????56 34 12

??1a:?c9????????????????????????leave?

??1b:??????????c3????????????????????????ret???

現在,我們定義的全局變量被放到0x1234處了。通過給ld指定-Tdata參數,可以自由的定義數據段的地址,如果不指定,數據段在代碼段后。

再看看直接給全局變量進行初始化的情況。

const int I=0x12345678;

int main()

{

}

仍然使用上面的方法進行編譯、鏈接、反匯編,其結果如下:

00000000 <.data>:

???0:??????????55????????????????????????push???%ebp

???1:??????????89 e5??????????????????????mov????%esp,%ebp

???3:??????????83 ec 08????????????????????sub????$0x8,%esp

???6:??????????83 e4 f0?????????????????????and????$0xfffffff0,%esp

???9:??????????b8 00 00 00 00????????????????mov????$0x0,%eax

???e:?29 c4??????????????????????sub????%eax,%esp

??10:??????????c9????????????????????????leave?

??11:??????????c3????????????????????????ret???

??12:??????????00 00??????????????????????add????%al,(%eax)

??14:??????????78 56??????????????????????js?????0x6c

??16:??????????34 12??????????????????????xor????$0x12,%al

代碼以4Bytes對齊,全局變量被直接存儲在代碼段之后的數據段,ld直接將常數放到了全局變量的位置,一步到位。

使用如下命令可以看到更多細節:

objdump –D test.o

可以看到如下的結果:

test.o:?????file format elf32-i386

?

Disassembly of section .text:

?

00000000 <main>:

???0:??????????55????????????????????????push???%ebp

???1:??????????89 e5??????????????????????mov????%esp,%ebp

???3:??????????83 ec 08????????????????????sub????$0x8,%esp

???6:??????????83 e4 f0?????????????????????and????$0xfffffff0,%esp

???9:??????????b8 00 00 00 00????????????????mov????$0x0,%eax

???e:?29 c4??????????????????????sub????%eax,%esp

??10:??????????c9????????????????????????leave?

??11:??????????c3????????????????????????ret???

Disassembly of section .data:

Disassembly of section .rodata:

?

00000000 <i>:

???0:??????????78 56??????????????????????js?????58 <main+0x58>

???2:??????????34 12??????????????????????xor????$0x12,%al

我們可以更清楚地看到,在.c文件中定義的全局常量被放在了只讀的數據段中了。再看下面的一段代碼:

int I=0x12345678;

const int c=0x12345678;

int main()

{

}

還是使用上面的方法編譯、鏈接、反匯編,可以到到如下結果:

test.o:?????file format elf32-i386

?

Disassembly of section .text:

?

00000000 <main>:

???0:??????????55????????????????????????push???%ebp

???1:??????????89 e5??????????????????????mov????%esp,%ebp

???3:??????????83 ec 08????????????????????sub????$0x8,%esp

???6:??????????83 e4 f0?????????????????????and????$0xfffffff0,%esp

???9:??????????b8 00 00 00 00????????????????mov????$0x0,%eax

???e:?29 c4??????????????????????sub????%eax,%esp

??10:??????????c9????????????????????????leave?

??11:??????????c3????????????????????????ret???

Disassembly of section .data:

?

00000000 <i>:

???0:??????????78 56??????????????????????js?????58 <main+0x58>

???2:??????????34 12??????????????????????xor????$0x12,%al

Disassembly of section .rodata:

?

00000000 <c>:

???0:??????????78 56??????????????????????js?????58 <main+0x58>

???2:??????????34 12??????????????????????xor????$0x12,%al

可以看出,整數I被放在了普通的數據段中,常數c被放在了只讀數據段中了。當使用全局變量(常量)時,ld會自動的使用合適的數據段存儲他們。

5.?????????處理指針

使用如下代碼來查看gcc處理指針變量的情況:

int main()

{

int I;

int* p;

p=&I;

*p=0x12345678;

}

使用objdump查看生成的機器代碼:

00000000 <main>:

???0:??????????55????????????????????????push???%ebp

???1:??????????89 e5??????????????????????mov????%esp,%ebp

???3:??????????83 ec 08????????????????????sub????$0x8,%esp

???6:??????????83 e4 f0?????????????????????and????$0xfffffff0,%esp

???9:??????????b8 00 00 00 00????????????????mov????$0x0,%eax

???e:?29 c4??????????????????????sub????%eax,%esp

??10:?????????8d 45 fc?????????????????????lea????0xfffffffc(%ebp),%eax

??13:?????????89 45 f8????????????????????mov????%eax,0xfffffff8(%ebp)

??16:?????????8b 45 f8????????????????????mov????0xfffffff8(%ebp),%eax

??19:?????????c7 00 78 56 34 12????movl???$0x12345678,(%eax)

??1f:?c9????????????????????????leave?

??20:??????????c3????????????????????????ret???

一開始,gcc已經為局部變量預分配了至少8Bytes的空間,并且使esp以16Bytes邊界對齊,如果還需要額外的空間,gcc將按照16Bytes為單位進行分配,而不是其他編譯器所使用的以1Byte為單位進行分配。變量I位于ebp-4,變量p位于ebp-8,lea指令將I的有效地址放入eax中,然后又被放入p中。最后,將0x12345678賦給p指向的變量I。

6.?????????關于函數調用

看如下代碼:

void func();

int main()

{

func();

}

void func()

{

}

再看生成的二進制代碼:

00000000 <.data>:

???0:??????????55????????????????????????push???%ebp

???1:??????????89 e5??????????????????????mov????%esp,%ebp

???3:??????????83 ec 08????????????????????sub????$0x8,%esp

???6:??????????83 e4 f0?????????????????????and????$0xfffffff0,%esp

???9:??????????b8 00 00 00 00????????????????mov????$0x0,%eax

???e:?29 c4??????????????????????sub????%eax,%esp

??10:??????????e8 03 00 00 00????????????????call???0x18

??15:??????????c9????????????????????????leave?

??16:??????????c3????????????????????????ret???

??17:??????????90????????????????????????nop???

??18:??????????55????????????????????????push???%ebp

??19:??????????89 e5??????????????????????mov????%esp,%ebp

??1b:??????????c9????????????????????????leave?

??1c:?c3????????????????????????ret???

主函數main通過call指令調用了空函數func,該函數與main大同小異。為ld指定-Map開關輸出map文件,可以得到更詳細的信息。

.text???????????0x00000000???????0x1d

?*(.text .stub .text.* .gnu.linkonce.t.*)

?.text??????????0x00000000???????0x1d???????test.o

????????????????0x00000000????????????????main

????????????????0x00000018????????????????func

第一列是段名,這里是.text;第二列是起始位置,第三列是段長度,最后一列是附加信息,如函數名、所出自的目標文件等。可以看到,.text段從0x0開始,長度為0x1d;函數func從0x18開始。

7.?????????函數的返回值

看下面的代碼,主函數main返回一個整型值:

int main()

{

return 0x12345678;

}

所生成的二進制代碼與其他編譯器大同小異:

00000000 <main>:

???0:??????????55????????????????????????push???%ebp

???1:??????????89 e5??????????????????????mov????%esp,%ebp

???3:??????????83 ec 08????????????????????sub????$0x8,%esp

???6:??????????83 e4 f0?????????????????????and????$0xfffffff0,%esp

???9:??????????b8 00 00 00 00????????????????mov????$0x0,%eax

???e:?29 c4??????????????????????sub????%eax,%esp

??10:??????????b8 78 56 34 12????????????????mov????$0x12345678,%eax

??15:??????????c9????????????????????????leave?

??16:??????????c3????????????????????????ret???

你已經看到了,gcc使用eax傳遞返回值。因為返回值就是eax寄存器的值,所以你可以隱含的返回,甚至什么都不返回。因為返回值保存在寄存器中,進行函數調用時,經常忽略返回值。例如,我們經常這樣調用函數:

printf(…);

該函數是有返回值的。如果函數返回的數據大于4Bytes,就不能再使用這種方法返回數據了。再看下面的例子:

typedef strUCt mydef{

int a,b,c,d;

int array[10];

}mydef;

?

mydef func();

int main()

{

mydef d;

d=func();

}

mydef func()

{

mydef d;

return d;

}

接著看反匯編的代碼:

00000000 <.data>:

???0:??????????55????????????????????????push???%ebp

???1:??????????89 e5??????????????????????mov????%esp,%ebp

???3:??????????83 ec 48????????????????????sub????$0x48,%esp

???6:??????????83 e4 f0?????????????????????and????$0xfffffff0,%esp

???9:??????????b8 00 00 00 00????????????????mov????$0x0,%eax

???e:?29 c4??????????????????????sub????%eax,%esp

??10:??????????8d 45 b8????????????????????lea????0xffffffb8(%ebp),%eax

??13:??????????83 ec 0c?????????????????????sub????$0xc,%esp

??16:??????????50????????????????????????push???%eax

??17:??????????e8 06 00 00 00????????????????call???0x22

??1c:?83 c4 0c????????????????????add????$0xc,%esp

??1f:?c9????????????????????????leave?

??20:??????????c3????????????????????????ret???

??21:??????????90????????????????????????nop???

??22:??????????55????????????????????????push???%ebp

??23:??????????89 e5??????????????????????mov????%esp,%ebp

??25:??????????57????????????????????????push???%edi

??26:??????????56????????????????????????push???%esi

??27:??????????83 ec 40????????????????????sub????$0x40,%esp

??2a:?8b 7d 08????????????????????mov????0x8(%ebp),%edi

??2d:??????????8d 75 b8????????????????????lea????0xffffffb8(%ebp),%esi

??30:??????????fc?????????????????????????cld???

??31:??????????b8 0e 00 00 00????????????????mov????$0xe,%eax

??36:??????????89 c1??????????????????????mov????%eax,%ecx

??38:??????????f3 a5???????????????????????repz movsl %ds:(%esi),%es:(%edi)

??3a:?8b 45 08????????????????????mov????0x8(%ebp),%eax

??3d:??????????83 c4 40????????????????????add????$0x40,%esp

??40:??????????5e????????????????????????pop????%esi

??41:??????????5f????????????????????????pop????%edi

??42:??????????c9????????????????????????leave?

??43:??????????c2 04 00????????????????????ret????$0x4

我們自定義的結構為0x38Bytes,gcc為了保持堆棧的16Bytes對齊,分配了0x40Bytes的空間。函數func并沒有參數,但是在調用時,卻將變量d的指針傳了進去。然后利用這個指針,使用指令movsl直接對d進行賦值。再看下面的例子:

typedef struct mydef{

int a,b,c,d;

int array[10];

}mydef;

?

mydef func();

int main()

{

func();

}

mydef func()

{

mydef d;

return d;

}

再看反匯編的結果:

00000000 <.data>:

???0:??????????55????????????????????????push???%ebp

???1:??????????89 e5??????????????????????mov????%esp,%ebp

???3:??????????83 ec 48????????????????????sub????$0x48,%esp

???6:??????????83 e4 f0?????????????????????and????$0xfffffff0,%esp

???9:??????????b8 00 00 00 00????????????????mov????$0x0,%eax

???e:?29 c4??????????????????????sub????%eax,%esp

??10:??????????8d 45 b8????????????????????lea????0xffffffb8(%ebp),%eax

??13:??????????83 ec 0c?????????????????????sub????$0xc,%esp

??16:??????????50????????????????????????push???%eax

??17:??????????e8 06 00 00 00????????????????call???0x22

??1c:?83 c4 0c????????????????????add????$0xc,%esp

??1f:?c9????????????????????????leave?

??20:??????????c3????????????????????????ret???

??21:??????????90????????????????????????nop???

??22:??????????55????????????????????????push???%ebp

??23:??????????89 e5??????????????????????mov????%esp,%ebp

??25:??????????57????????????????????????push???%edi

??26:??????????56????????????????????????push???%esi

??27:??????????83 ec 40????????????????????sub????$0x40,%esp

??2a:?8b 7d 08????????????????????mov????0x8(%ebp),%edi

??2d:??????????8d 75 b8????????????????????lea????0xffffffb8(%ebp),%esi

??30:??????????fc?????????????????????????cld???

??31:??????????b8 0e 00 00 00????????????????mov????$0xe,%eax

??36:??????????89 c1??????????????????????mov????%eax,%ecx

??38:??????????f3 a5???????????????????????repz movsl %ds:(%esi),%es:(%edi)

??3a:?8b 45 08????????????????????mov????0x8(%ebp),%eax

??3d:??????????83 c4 40????????????????????add????$0x40,%esp

??40:??????????5e????????????????????????pop????%esi

??41:??????????5f????????????????????????pop????%edi

??42:??????????c9????????????????????????leave?

??43:??????????c2 04 00????????????????????ret????$0x4

可以說,與上面的結果一字不差!我們沒有在main函數中聲明變量存儲func返回的結果,但是gcc替我們做了。它仍然為函數func傳遞了一個指針,并將結果傳了出來,盡管我們對返回值不感興趣,但編譯器對我們的興趣好像也沒有興趣,依然我行我素。(如果使用了優化選項,結果很可能有所相同)。

8.?????????給函數傳遞參數

gcc遵循一般的c語言標準,包括參數傳遞方式。看看下面的例子:

char res;

char func(char a,char b);

int main()

{

res=func(0x02,0x03);

}

char func(char a,char b)

{

return a+b;

}

再看看他的反匯編代碼:

00000000 <.data>:

???0:??????????55????????????????????????push???%ebp

???1:??????????89 e5??????????????????????mov????%esp,%ebp

???3:??????????83 ec 08????????????????????sub????$0x8,%esp

???6:??????????83 e4 f0?????????????????????and????$0xfffffff0,%esp

???9:??????????b8 00 00 00 00????????????????mov????$0x0,%eax

???e:?29 c4??????????????????????sub????%eax,%esp

??10:??????????83 ec 08????????????????????sub????$0x8,%esp

??13:??????????6a 03??????????????????????push???$0x3

??15:??????????6a 02??????????????????????push???$0x2

??17:??????????e8 0a 00 00 00????????????????call???0x26

??1c:?83 c4 10????????????????????add????$0x10,%esp

??1f:?a2 44 00 00 00????????????????mov????%al,0x44

??24:??????????c9????????????????????????leave?

??25:??????????c3????????????????????????ret???

??26:??????????55????????????????????????push???%ebp

??27:??????????89 e5??????????????????????mov????%esp,%ebp

??29:??????????83 ec 04????????????????????sub????$0x4,%esp

??2c:?8b 45 08????????????????????mov????0x8(%ebp),%eax

??2f:?8b 55 0c????????????????????mov????0xc(%ebp),%edx

??32:??????????88 45 ff?????????????????????mov????%al,0xffffffff(%ebp)

??35:??????????88 55 fe?????????????????????mov????%dl,0xfffffffe(%ebp)

??38:??????????8a 45 fe?????????????????????mov????0xfffffffe(%ebp),%al

??3b:??????????02 45 ff?????????????????????add????0xffffffff(%ebp),%al

??3e:?0f be c0?????????????????????movsbl %al,%eax

??41:??????????c9????????????????????????leave?

??42:??????????c3????????????????????????ret???

如果你精通匯編語言,看完這段代碼,恐怕你已經口吐鮮血并暈倒在地了!gcc居然生成了這么啰嗦的代碼!但是,我們還是先說說C語言的函數調用規范吧。

我們已經看到了,參數從右到左依次入棧。下面的說明全部以32Bytes代碼為準,其規范具體可羅列以下幾條:

l??????????調用者負責將參數壓入堆棧,順序為從右到左依次入棧。也就是左邊的最后入棧。

l??????????調用者使用near call指令將控制權傳給被調用者。

l??????????被調用者得到控制權,一般需要創建堆棧框架(這不是必需的,通常都是這么做)。首先,將ebp壓入堆棧保存,再將esp放入ebp,使ebp成為訪問參數的基址指針。

l??????????被調用者通過ebp訪問參數。因為ebp已經先行壓入堆棧,所以[ebp+4]就是被call指令自動壓入堆棧的返回地址,顯然,從[ebp+8]開始,就是參數。由于函數最左邊的參數最后被壓入堆棧,所以[ebp+8]就是該參數,其他參數以此類推。像printf這樣的函數,具有個數不確定的參數,但是參數入棧順序的規則,說明被調用者通過[ebp+8]就能夠找到第一個參數,其他參數的類型和數目,則需要由第一個參數給出。

l??????????被調用者減小esp的值為堆棧中的臨時變量分配空間,然后使用ebp和一個負的偏移訪問。

l??????????被調用者使用al,ax,eax返回大小不同的值。浮點數可以通過ST0寄存器返回。

l??????????被調用者完成處理后,使用事先建立的堆棧框架,恢復esp,sbp的值,并使用ret指令返回調用者。

l??????????調用者重新得到控制權,通過給esp加上一個立即數清空堆棧(盡量不要使用多次pop指令清空堆棧)。如果因為使用了錯誤的函數原型通過堆棧多傳遞了或者少傳遞了參數,調用者仍然能夠將堆棧恢復到正確的狀態,因為調用者知道自己向堆棧壓了幾個字節的數據。

結合C語言的函數調用規則,上面的代碼不難理解。

從80386開始,push指令的操作數可以是8-bit,16-bit,32-bit,但是C語言統統按32-bit整型數處理,被調用者也按32-bit進行處理。這一點很重要,特別是匯編語言和C語言混合編程時。

9.?????????基本的數據類型間的轉換

gcc處理三類基本數據類型:

l??????????signed char , unsigned char??, 1 Byte

l??????????signed short , unsigned short , 2 Bytes

l??????????signed int , unsigned int , 4 Bytes

各種數據類型間的轉換,遵循一般C語言的規則,具體可以參考IA-32的標準。這里只舉一例說明:

int main()

{

char ch=’a’;

int x=2;

int y=-4;

}

使用同樣的方法進行編譯及反匯編:

00000000 <main>:

???0:??????????55????????????????????????push???%ebp

???1:??????????89 e5??????????????????????mov????%esp,%ebp

???3:??????????83 ec 18????????????????????sub????$0x18,%esp

???6:??????????83 e4 f0?????????????????????and????$0xfffffff0,%esp

???9:??????????b8 00 00 00 00????????????????mov????$0x0,%eax

???e:?29 c4??????????????????????sub????%eax,%esp

??10:??????????c6 45 ff 61???????????????????moVB???$0x61,0xffffffff(%ebp)

??14:??????????c7 45 f8 02 00 00 00???movl???$0x2,0xfffffff8(%ebp)

??1b:??????????c7 45 f4 fc ff ff ff????????movl???$0xfffffffc,0xfffffff4(%ebp)

??22:??????????c9????????????????????????leave?

??23:??????????c3????????????????????????ret???

?

10.?????gcc編譯代碼的基本運行環境

這一部分,我查了很多的文檔,都沒有這方面的介紹。又請教了很多的高手,大致情況如下,我實在無法保證這里所說的都是正確的,并且將來也是正確的,僅供參考:

l??????????32-bit的保護模式下運行。

l??????????段寄存器CS,ds,es,fs,gs,ss必須指向同一段內存區域。

l??????????沒有初始化的全局變量被放在BSS的段內,該區域在代碼段之后。但是,如果你生成的文件是二進制文件,BSS段不是該文件的一部分,你需要自己小心使用。初始化的全局變量在DATA段內,它是二進制文件的一部分,并且位于代碼段之后。被聲明為const的全局變量被放在RODATA段內,它也是二進制文件的一部分,并放在代碼段之后。

l??????????確保堆棧沒有溢出,小心代碼段和全局數據不要被破壞。

我也查了Intel提供的幫助文檔“Intel Architecture Software Developer’s Manual”,一共有三卷之多!參考了其中關于內存組織(Volume 1:Memory Organization)中的說法(建議你去好好研究)。總之,使cs,ds,ss總是指向同一內存區域應該可以使代碼正確運行。如果運行環境不是這樣,我就不知道結果了。

11.?????訪問外部的全局變量

看看在非C語言程序中如何訪問C語言程序中的全局變量。如果你想使用其他程序加載C程序,例如匯編語言寫的程序,這部分很有用,特別是在核心開發時經常用到。

int myVal=0x5;

int main()

{

}

編譯這段代碼:

gcc –c test.c

ld –Ttext 0x0 –e main –N –oformat binary –Map memmap.txt –o test.bin test.o

objdump –D –b binrary –m i386 test.bin

得到如下結果:

00000000 <.data>:

???0:??????????55????????????????????????push???%ebp

???1:??????????89 e5??????????????????????mov????%esp,%ebp

???3:??????????83 ec 08????????????????????sub????$0x8,%esp

???6:??????????83 e4 f0?????????????????????and????$0xfffffff0,%esp

???9:??????????b8 00 00 00 00????????????????mov????$0x0,%eax

???e:?29 c4??????????????????????sub????%eax,%esp

??10:??????????c9????????????????????????leave?

??11:??????????c3????????????????????????ret???

??12:??????????00 00??????????????????????add????%al,(%eax)

??14:??????????05????????????????????????.byte 0x5

??15:??????????00 00??????????????????????add????%al,(%eax)

全局變量myVal存儲在0x14。剛才已經使用-Map開關使ld生成了內存映像文件memmap.txt,應該能夠找到:

.data???????????0x00000014????????0x4

?*(.data .data.* .gnu.linkonce.d.*)

?.data??????????0x00000014????????0x4 test.o

????????????????0x00000014????????????????myVal

說明myVal位于test.o模塊的0x00000014位置。使用地址作為偏移量,就可以直接在其他語言中訪問myVal變量了。另為也可以通過memmap.txt查到BSS段的大小:

cat memmap.txt grep ‘/.bss’ grep ‘0x’ sed ‘s/.*0x/0x/’

本例子,BSS的大小是0x0。

無法直接訪問C程序中的使用static修飾的全局變量。因為這樣的變量是靜態的,map文件中沒有列出他們的地址。也許你可以使用其他辦法做到,但是,最好不要這樣做。

12.?????生成其他格式的二進制文件的選項

生成不同格式的二進制文件是一件相當麻煩的事。它需要使用很多不常使用的選項,并且有些在man的幫助信息中沒有被列出。

首先是gcc的選項:-nostdinc。很顯然,使用該選項后,gcc就不搜索默認的include路徑了,通常是/usr/include。如果需要使用的自定義的頭文件,可以使用-I選項添加搜索路徑。

然后是ld的選項。第一個是-nostdlib,就是忽略標準庫。如果需要,可以使用-L選項指定庫的搜索路徑。第二個是-Ttext,就是指定代碼段的地址,如果沒有繼續指定其他段的地址,則他們將自動的一次被放在代碼段之后。第三個是-e,就是指定代碼的入口地址,默認的是_start,如果代碼不是以其開頭,就應該指定入口點。第四個是—oformat binary,就是輸出的文件是原始的二進制文件,而是如文件可以使系統支持的任何文件。但是,中間模塊文件不能是原始的二進制文件,因為還需要很多符號和重定位信息。可以使用—iformat選項指定輸入文件的格式,但通常很少使用。第五個是-static,如果使用了其他庫,用該使用靜態鏈接方式,除非你的程序支持動態鏈接。

另外還有代碼指示偽指令。匯編器可以編譯16-bit代碼,也可以編譯32-bit代碼。但是,gcc總是生成32-bit的匯編代碼。通過在C代碼中使用asm()偽指令可以讓gcc生成16-bit匯編代碼。

第一個是.code16,即生成在16-bit段中運行的16-bit代碼;

第二個是.code32,即生成在32-bit段中運行的32-bit代碼,默認情況下gcc總是這么做;

第三個是.code16gcc,gcc將根據需要決定生成在16-bit段下運行的16-bit或32-bit代碼。GAS將會加上必要的前綴,指示32-bit的指令或寄存器等。這個選項是很有用的,它允許我們使用C語言寫在16-bit環境下運行的代碼,不論是實模式還是保護模式。

現在可以在一個C模塊中既有16-bit代碼,又有32-bit代碼,但是此時需要注意不同部分代碼的地址空間問題。

例如,我們想使用gcc生成在DOS下運行的.com程序和啟動引導程序。

首先,DOS中的.com文件是在實模式下運行的原始的二進制文件,其起始地址為0x100。要使用gcc生成.com文件,在每一個.c文件的開頭加上如下偽指令:

__asm__(“code16gcc/n”);

如果需要引用其他庫文件,則這些庫文件也需要按這種方式生成。在鏈接時,加上如下選項:

-Ttext 0x100 –static –oformat binary

如果程序中包含嵌入的匯編代碼,需要將其轉換為AT&T格式。

如果要寫引導程序,只需要在鏈接時使用0x7C00代替0x100!另外,最終生成的二進制代碼必須小于446個字節!

13.?????參考資料

l??????????Intel Architecture Software Developer’s Manual

l??????????Manual Pages in Linux

l??????????Redhat GNUPro Toolkit


總結

以上是生活随笔為你收集整理的使用GCC生成无格式二进制文件(plain binary files)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

高清av免费看 | 日韩激情在线 | 国产精品九九久久久久久久 | 国产一线二线三线性视频 | 国产精品 999 | 色婷婷免费视频 | 美女在线观看av | 亚洲精选在线 | 国产视频美女 | 亚洲国产福利视频 | 日韩三级免费 | 日韩电影在线观看中文字幕 | 精品国产自| 五月婷婷综合在线 | 在线亚洲成人 | 操操操人人人 | 免费a一级| 成年人在线免费看 | 亚洲毛片一区二区三区 | 91九色视频在线 | 视频在线播放国产 | 久热这里有精品 | 中文字幕一区二区三区在线视频 | 久久99视频 | 日韩av片在线 | 免费久久久 | 成人不用播放器 | 久久精品99国产精品酒店日本 | 日本在线精品视频 | 欧美a级片免费看 | 在线91av | 免费观看一级视频 | 91香蕉视频在线 | 激情综合网天天干 | 精品视频久久久 | 91香蕉视频 | 亚洲精品视频网 | 成人午夜精品 | 久久精品国产精品亚洲精品 | 亚洲精品国产精品国 | 亚洲在线精品 | 久草久草久草久草 | 色婷婷在线视频 | 中文字幕资源在线 | 9999国产| 欧美成人久久 | 国产亚洲综合在线 | 午夜精品电影 | 国产成人av综合色 | 五月婷婷六月综合 | 天天操狠狠操 | av久久久久久 | 一区二区丝袜 | 久香蕉| 黄色一级大片在线免费看产 | 久久久久夜色 | 成人黄色电影视频 | 欧美性大胆 | 天天操天天操天天操天天操天天操 | 超碰在线最新网址 | 黄色小网站免费看 | 国产你懂的在线 | 国产区精品区 | 欧美色婷 | 在线探花 | 日韩免费电影一区二区三区 | 91视频高清完整版 | 欧美在线观看视频免费 | 久久综合狠狠综合 | 人人澡人人舔 | 黄色av电影在线 | 激情网站网址 | 久久中文字幕在线视频 | 午夜精品久久久久久久久久久久 | 久久91网| 久久精品之 | 射射射av| 在线高清av | 视频一区二区视频 | 去干成人网 | 亚洲精品日韩在线观看 | 99久久久国产精品 | 一级性视频 | 色网站在线 | 少妇视频一区 | 国产成本人视频在线观看 | 久草热视频 | 中文字幕一区在线观看视频 | 婷婷丁香自拍 | 93久久精品日日躁夜夜躁欧美 | 五月婷网站 | 亚洲视频h | 国内精品久久久久影院一蜜桃 | 日韩精品一区二区不卡 | 特黄免费av | 久久久久久久久久久久久久免费看 | 亚洲国产中文字幕在线 | 久草网站在线观看 | 在线观看91精品视频 | 天天艹天天爽 | 亚洲日本在线视频观看 | 亚洲精品美女视频 | 欧美精品一二 | 亚洲亚洲精品在线观看 | 免费日韩一级片 | 国产一级在线视频 | 午夜少妇av | 久久精品国产第一区二区三区 | 婷婷激情久久 | 天天摸天天干天天操天天射 | 午夜91在线 | 婷婷电影在线观看 | 午夜18视频在线观看 | 精品夜夜嗨av一区二区三区 | 最新精品国产 | 国产成人久久精品77777综合 | 国产黄免费 | 亚洲高清资源 | 国产一区视频在线播放 | 亚洲欧洲久久久 | 国产午夜精品免费一区二区三区视频 | 91色吧| 久久久在线视频 | 亚洲欧美色婷婷 | 中文字幕在线播放视频 | 7777xxxx| 免费看的黄色录像 | 91精品伦理 | 天天曰夜夜操 | 中文视频在线播放 | 午夜av一区二区三区 | 丁香花在线观看免费完整版视频 | 91视频国产免费 | 久久久久久久99精品免费观看 | 精品国产乱码久久久久久1区二区 | 精品乱码一区二区三四区 | www.伊人网| 人人舔人人舔 | 99久久精品久久久久久清纯 | 国内一区二区视频 | 国产最新视频在线观看 | av高清一区二区三区 | 成人免费看片98欧美 | 91免费在线 | 国产精品xxxx18a99 | 久草精品国产 | 中文字幕中文字幕在线中文字幕三区 | 麻豆免费观看视频 | 成人黄色大片 | 日韩欧美高清一区二区三区 | 国产精品手机播放 | 欧美污网站 | 中文字幕乱在线伦视频中文字幕乱码在线 | 天天色综合1 | 97精品国产aⅴ | 久久国产精品成人免费浪潮 | 久久久久久久久久久免费av | 成人一区在线观看 | 久久久精品欧美一区二区免费 | 99色视频 | 免费看黄在线网站 | 九九热精| www天天操 | 国产视频一区二区在线观看 | 婷婷激情综合 | 91色吧| 四虎免费在线观看视频 | 日本不卡123 | 亚洲日日射 | 奇米导航 | 国产伦理久久精品久久久久_ | 午夜av电影院 | 五月天久久 | 免费看的黄色 | 免费久久99精品国产婷婷六月 | 亚洲2019精品 | 国产精品 视频 | 欧美性大胆 | 免费av试看 | 夜夜嗨av色一区二区不卡 | 国产精品成人国产乱 | 在线观看亚洲国产精品 | 天天射射天天 | 亚洲全部视频 | 狠狠色狠狠色综合日日小说 | 欧洲亚洲激情 | 91精品爽啪蜜夜国产在线播放 | 麻豆精品视频在线 | 欧美资源 | 欧洲色综合 | 激情综合五月婷婷 | 91在线公开视频 | 色国产视频 | 国产一区二区精 | 日韩精品视频久久 | 日韩中文字幕视频在线观看 | 日韩在线三区 | 国产午夜免费视频 | 久久精品亚洲国产 | 国产精品99久久久久久久久 | 国产第一福利 | 亚洲三区在线 | 国产美女黄网站免费 | 欧美日韩在线视频免费 | 国产高清成人 | 成 人 黄 色 免费播放 | 亚洲无吗视频在线 | 日韩国产精品一区 | 精品久久久免费视频 | 国产精品一二 | 国产91探花| 国产99久久久国产精品成人免费 | 国内精品久久久久久久久久清纯 | 日韩精品视频在线免费观看 | 日韩性色 | 人人添人人澡 | 国产美女免费观看 | 激情伊人五月天 | 中文字幕在线看视频国产中文版 | 久久久久www | 国产午夜影院 | 日韩电影一区二区在线 | 91精品亚洲影视在线观看 | 久草在在线 | 国产青青青 | 国产h片在线观看 | 久久久久久高潮国产精品视 | 韩国三级一区 | 久草爱视频 | 亚洲天堂精品视频 | 成人在线视频免费观看 | 在线观看国产www | 国产精品视频地址 | 97在线观看免费 | 午夜久久久精品 | 四虎天堂 | 高清av在线 | 成 人 黄 色视频免费播放 | 国产在线看 | 天天激情 | 日韩欧美亚州 | 国产黄色片免费观看 | 99亚洲精品视频 | 成人免费在线观看入口 | 九九久久在线看 | 99热精品在线 | 国产精品高潮呻吟久久久久 | 欧洲性视频 | 国产最新视频在线观看 | 伊人影院在线观看 | 国产不卡一二三区 | 一级黄毛片 | 日韩乱码中文字幕 | 激情综合啪啪 | 久久久电影| av网址最新 | 国产很黄很色的视频 | 国产在线成人 | 天天躁日日躁狠狠躁av中文 | 日韩在线观看精品 | www色网站 | 亚洲激精日韩激精欧美精品 | 天天插综合网 | 日韩精品综合在线 | 国产黄色片在线免费观看 | 狠狠躁18三区二区一区ai明星 | 最新中文字幕在线播放 | 人人爽人人爱 | 国产在线一线 | 国产一级视频在线观看 | 91精品国产三级a在线观看 | 中文字幕一区二区三区乱码不卡 | 久久99精品国产99久久6尤 | 亚洲男男gaygay无套 | 免费福利片2019潦草影视午夜 | 亚洲视频中文 | 国产日韩欧美在线免费观看 | 天天av天天 | 久久久久女人精品毛片九一 | 18岁免费看片 | 国产乱对白刺激视频不卡 | 日韩草比 | 亚洲日本黄色 | 男女免费视频观看 | 亚洲精品一区二区三区新线路 | 色综合天天狠天天透天天伊人 | 手机在线视频福利 | 久久欧美综合 | 精品久久久免费视频 | av在线h| 天天操综 | 黄色电影小说 | 中文字幕久久精品一区 | 日免费视频 | 亚洲一级免费电影 | 欧美日韩在线视频一区 | 天天综合天天做天天综合 | av+在线播放在线播放 | 久久99精品一区二区三区三区 | 在线观看国产 | 波多野结依在线观看 | 日韩视频在线观看视频 | 国产毛片在线 | 久久九九久久精品 | 久草在线观看 | 国产视频一区在线 | 久草a在线 | 精品播放| 黄色影院在线免费观看 | 日韩午夜电影网 | 狠狠操精品 | 国产精久久久 | 久草97| 亚洲欧洲一级 | 国内精品久久久久久久久久清纯 | japanese黑人亚洲人4k | 日日操天天操夜夜操 | 久久99精品国产麻豆婷婷 | 在线免费高清一区二区三区 | 91在线蜜桃臀 | 久久九九免费视频 | 国产精品久久99综合免费观看尤物 | 欧美特一级| 九九九国产 | 91在线免费视频 | 麻花天美星空视频 | 四虎在线永久免费观看 | 久久免费av电影 | 美女搞黄国产视频网站 | 超碰在线97观看 | 亚洲一区视频在线播放 | 国产福利91精品张津瑜 | 久久成人国产精品一区二区 | 欧美乱码精品一区二区 | 天天操综合网站 | 久草在线视频看看 | 免费看国产曰批40分钟 | 久久久www成人免费精品张筱雨 | 丁香av在线| www九九热| www色综合| 三上悠亚一区二区在线观看 | 国外成人在线视频网站 | 一本一本久久a久久精品牛牛影视 | 青青视频一区 | 国产视频亚洲精品 | 亚洲不卡av一区二区三区 | 精品少妇一区二区三区在线 | 激情欧美在线观看 | 欧美日韩亚洲在线观看 | 中文字幕在线观看日本 | av一级一片 | av在线影视 | 中文字幕av在线 | 日本黄区免费视频观看 | 色综合久久网 | 亚洲精品免费在线播放 | 中文视频在线 | 国产成人一区二区精品非洲 | 色综合久久久久久久 | 色欧美88888久久久久久影院 | 国产在线精品一区二区不卡了 | 欧美国产精品久久久久久免费 | 最近中文字幕免费视频 | 天天拍天天爽 | 在线观看免费 | 99国产在线 | 久久精品国产成人精品 | 在线观看黄色免费视频 | 特级毛片网站 | 又黄又爽又无遮挡的视频 | 国产精品美女久久久免费 | 国产一区二区在线播放视频 | 国产成人a v电影 | 国产精品高潮呻吟久久久久 | 亚洲人人射 | 亚洲男模gay裸体gay | 97超视频免费观看 | 一区二区精品视频 | 精品国产一区二区三区久久久蜜臀 | 国内精品久久久久影院一蜜桃 | 日韩黄色在线观看 | 日韩精品专区 | 人人添人人澡人人澡人人人爽 | 国产视频中文字幕 | 日韩av一区二区在线影视 | 99久久99久国产黄毛片 | 久久久福利 | 欧美日韩国产一二 | 午夜成人免费影院 | 91福利视频网站 | 91免费视频黄 | 欧美激情精品 | 色橹橹欧美在线观看视频高清 | 午夜色大片在线观看 | 99精品久久久久久久 | 93久久精品日日躁夜夜躁欧美 | 久久激情久久 | 欧美日韩国产在线精品 | 99国产精品免费网站 | 精品福利av | 国内精品视频免费 | 国产日产欧美在线观看 | 久久亚洲二区 | 精品一区二区亚洲 | 国产精品原创 | 狠狠地日| 一本一本久久a久久精品综合妖精 | 亚洲黄色免费在线看 | 伊人六月| 香蕉日日 | 中文资源在线官网 | 国产视频精品视频 | 久久国产品 | 成人91免费视频 | 九九综合九九 | 久久伊人色综合 | 婷婷丁香激情综合 | 99色资源| 国产精品区免费视频 | 成人毛片在线视频 | 在线视频观看国产 | 81国产精品久久久久久久久久 | 日韩二级毛片 | 狠狠色狠狠色综合系列 | 国产黄色资源 | 麻豆传媒精品 | 色婷婷亚洲综合 | 中文字幕久久精品一区 | 久久久噜噜噜久久久 | 国产精品久久久久久婷婷天堂 | 婷婷丁香在线视频 | 天天色.com| 午夜视频黄| 国语久久 | 精品久久美女 | 正在播放一区 | 成人免费看片98欧美 | 成人毛片在线观看视频 | 久99久在线 | 色综合中文综合网 | 高清不卡毛片 | 在线天堂中文www视软件 | 国产精品久久久av | 国产精久久| 国产精品久久久久久久久费观看 | 成年人在线观看网站 | 中文字幕91视频 | 欧美午夜视频在线 | 成人精品国产免费网站 | 欧美另类69 | 久久精品视频观看 | 亚洲激情六月 | 久久最新 | 久久婷婷综合激情 | 国产精品12345 | 97成人在线观看 | av电影免费在线播放 | 欧美一级艳片视频免费观看 | 亚洲视频播放 | aa一级片| 久久成人黄色 | 在线观看免费黄色 | 二区三区在线观看 | 五月花激情 | 久久无码av一区二区三区电影网 | 在线国产日韩 | 日韩手机在线 | 精品在线看 | 波多野结衣资源 | 成人小电影在线看 | 中文av网站| 久久精品久久综合 | 日韩字幕在线观看 | 免费看国产曰批40分钟 | 亚洲国产wwwccc36天堂 | 国产一区二区三区高清播放 | 最近免费观看的电影完整版 | 久久亚洲免费 | 午夜影视av | 国产91电影在线观看 | 18国产精品白浆在线观看免费 | 三级黄色网络 | 亚洲91av | 亚洲天堂香蕉 | 99免费在线观看视频 | 97视频在线播放 | 亚洲撸撸 | 久久综合偷偷噜噜噜色 | 欧美精品久久久久久久久久久 | 69国产盗摄一区二区三区五区 | 麻豆传媒视频在线播放 | 久久亚洲影视 | 亚洲黄色av | 成人9ⅰ免费影视网站 | 天天射色综合 | 福利av影院 | 国产视频一区二区三区在线 | av电影一区二区 | www178ccom视频在线 | 天天在线视频色 | av官网在线| 国产美女在线观看 | 中国成人一区 | 国产一区二区在线免费 | 最新国产在线视频 | 国产一级性生活 | 久久综合久久综合九色 | 午夜精品影院 | 色美女在线 | 国产精品欧美在线 | 一级免费av | 五月天久久综合网 | 亚一亚二国产专区 | 国产一区二区不卡视频 | 国产免费嫩草影院 | 色a在线观看| 久草在线综合 | 91免费试看 | 国产亚洲成av片在线观看 | 国产成人精品久久久 | 亚洲成人xxx | 久久99热国产 | 国产韩国日本高清视频 | 国产精品ⅴa有声小说 | 97香蕉超级碰碰久久免费软件 | 亚洲精品乱码 | 久久天堂网站 | 亚洲资源视频 | 97超碰资源 | 蜜臀av性久久久久蜜臀aⅴ流畅 | 久草在线视频免费资源观看 | 久久99精品国产麻豆宅宅 | 在线视频免费观看 | 黄色三级在线看 | 久久亚洲免费视频 | 91精彩视频在线观看 | 国产片免费在线观看视频 | 国产成人综合精品 | 亚洲黄色小说网址 | 久久视| 婷婷激情综合五月天 | 日本精品久久久久中文字幕5 | www夜夜操com | 91在线国产观看 | 国产美女精品在线 | 欧美aaa一级 | 国产亚洲一区二区三区 | 在线国产日韩 | 婷婷六月天丁香 | 欧美日韩国内在线 | 国产精品黄网站在线观看 | 午夜免费在线观看 | 一区二区三区久久精品 | 涩涩资源网 | 亚州国产精品久久久 | 91成品视频| 九九九在线观看 | 久久久久国产精品www | 久久在现| 国产青春久久久国产毛片 | 久久成人综合 | 色噜噜在线观看视频 | 日韩精品欧美视频 | 久久福利影视 | 91久久国产综合精品女同国语 | 国产精品毛片久久久久久 | 欧美在线18 | 国色天香第二季 | 亚a在线 | 四虎成人精品 | 婷婷久久久 | 免费a v视频| 美女在线黄 | 五月天六月丁香 | 五月天婷婷在线观看视频 | 天天色成人 | 亚洲国产欧美在线人成大黄瓜 | 日本高清中文字幕有码在线 | 久久综合九色综合97_ 久久久 | 免费精品| 最新av中文字幕 | 国产精品99蜜臀久久不卡二区 | 中文字幕免费高 | 欧美激情精品 | 国产精品久久久久久久久久久杏吧 | 波多野结衣视频一区二区三区 | www.国产在线观看 | 国产精品资源网 | 亚洲视频在线视频 | 国产精品99久久99久久久二8 | 日日夜夜干 | adn—256中文在线观看 | 亚洲精品日韩av | 国产不卡免费 | 超碰免费观看 | 美女激情影院 | 久久久久久久久久久网 | 久草在线最新视频 | 五月天婷婷在线观看视频 | 中文字幕乱码在线播放 | 亚洲最大av网| jizz999| 国产精品永久免费 | 精品视频国产一区 | 日韩精品一区电影 | 99精品视频在线播放观看 | a级一a一级在线观看 | 日韩在线免费观看视频 | 黄色软件大全网站 | 国产精品去看片 | 日韩精品中文字幕在线不卡尤物 | 国产精品久久久久久超碰 | 久久久免费视频播放 | 毛片a级片 | 在线观看免费版高清版 | 超碰在线观看av.com | 在线观看日韩中文字幕 | 国产精品高清av | 婷婷六月在线 | 亚洲h色精品 | av一本久道久久波多野结衣 | 日日噜噜噜噜夜夜爽亚洲精品 | 亚洲午夜激情网 | 久久精品网址 | 在线成人看片 | 国产午夜麻豆影院在线观看 | 国产中文字幕一区二区三区 | 中文字幕a∨在线乱码免费看 | 久章操 | 一级黄色大片 | 日韩久久久久久久久久 | 中文久久精品 | 欧美色综合久久 | 91国内产香蕉 | 日韩久久精品一区二区 | 九九九视频精品 | 91丨九色丨国产丨porny精品 | 午夜在线看片 | 久久在线观看 | 97精品视频在线 | 中文字幕日韩精品有码视频 | 成年人免费看片网站 | 久久久午夜剧场 | 成人电影毛片 | 久久五月天色综合 | 日韩在线视频一区二区三区 | 国产精品99久久久精品免费观看 | 色综合网在线 | 国产一级免费在线 | av蜜桃在线 | 国产精品久久久久久久久久久杏吧 | 超碰大片 | 免费色av | 午夜精品久久久久久久99婷婷 | 成年人黄色在线观看 | 天天干夜夜 | 日韩黄色免费看 | 久久美女高清视频 | 麻豆国产在线播放 | 精品久久91 | 亚洲一区二区三区在线看 | 欧美一级片在线观看视频 | 国产高清久久久 | 狠狠久久综合 | 国产乱对白刺激视频在线观看女王 | 97精品在线观看 | 日韩av看片 | 婷婷精品| 中文字幕在线观看免费 | 国产成人精品日本亚洲999 | 日韩sese | 丁香激情五月 | 黄色日批网站 | 精品国模一区二区 | 国产九九九视频 | 天天色天天上天天操 | 久久精品视频2 | 狠狠色丁香婷婷综合最新地址 | 日日草天天草 | 在线免费中文字幕 | 中文字幕在线观看三区 | 久久视频国产精品免费视频在线 | 五月激情久久 | 99人久久精品视频最新地址 | av网站免费线看精品 | 久久婷婷丁香 | 在线a视频免费观看 | 国产永久免费观看 | 午夜久久美女 | 九九九九九国产 | 国内揄拍国内精品 | 2023天天干| 国产精品久久久久久久久久久不卡 | 国产三级精品三级在线观看 | 婷婷成人在线 | 日韩网站一区二区 | 亚洲成人资源在线 | 97视频免费在线看 | 亚洲精品色婷婷 | 久久a级片 | www.久久久精品 | 日韩在线高清免费视频 | 欧美亚洲精品一区 | 亚洲精品ww| 久青草视频 | 国产一区二区在线观看免费 | 国产日产高清dvd碟片 | 国产免费久久 | 欧美日韩在线观看不卡 | 亚洲国产精品视频 | 91麻豆精品国产91久久久无需广告 | 亚洲国产精品va在线看 | 久久久久欧美精品 | 成人黄色一级视频 | 福利在线看片 | 亚洲国产综合在线 | 中文字幕最新精品 | 国产久草在线 | 日日天天 | 日韩色综合| 日日干天天爽 | 久久艹艹| 五月天综合激情 | 亚洲第一区在线播放 | 9999毛片| 亚洲mv大片欧洲mv大片免费 | 91麻豆精品国产91久久久无需广告 | 97成人在线 | 在线观看91精品视频 | 成人在线播放免费观看 | 中文字幕在线观看完整 | 91桃色国产在线播放 | 中文av日韩| 夜夜骑日日 | 国产一级黄色电影 | 久久艹99 | 天天天天天天操 | 狠狠色丁香婷婷综合久小说久 | 久久精品一区二区国产 | 日本最新中文字幕 | 伊人影院av | 久久99久久99精品中文字幕 | 日韩va在线观看 | 在线观看黄色的网站 | a级一a一级在线观看 | 国产美女主播精品一区二区三区 | 最近中文字幕在线播放 | 欧美精品久久久久性色 | 玖玖999 | 国产精品久久久久国产精品日日 | 国产日韩中文字幕 | 午夜.dj高清免费观看视频 | 波多野结衣视频一区 | 国产精品毛片一区视频播 | 国产一区二区免费 | 亚洲精品在线观看中文字幕 | 久草97| 高清不卡免费视频 | 狠狠色丁香久久婷婷综合_中 | 国产经典 欧美精品 | 久久99最新地址 | 国产精品大全 | 婷婷性综合| av亚洲产国偷v产偷v自拍小说 | 91丨九色丨国产在线 | av网站在线观看免费 | 国产精品18久久久久白浆 | 国产麻豆果冻传媒在线观看 | 国产99久久久国产精品成人免费 | 免费成人黄色片 | 国产黄色精品网站 | 亚洲一级片| 国产91精品在线播放 | 久久久久中文字幕 | 日韩和的一区二在线 | 婷婷精品国产欧美精品亚洲人人爽 | 欧美性猛片, | 在线国产能看的 | 狠狠色丁香久久综合网 | 亚洲一区二区天堂 | 免费观看视频黄 | 涩涩资源网 | 欧美日韩综合在线 | 日韩在线视频免费观看 | 伊人婷婷 | 亚洲91在线| 五月在线视频 | 日韩久久午夜一级啪啪 | 国产精品欧美精品 | 国产又粗又猛又爽 | 亚洲电影av在线 | 国产在线精品区 | 免费看一级黄色 | 超碰在线亚洲 | 91精品久久久久久久久 | 成人av在线亚洲 | 美女网站免费福利视频 | 国产一区二区三区免费观看视频 | 二区三区av| 亚洲视频免费在线观看 | 国产中文字幕在线 | 国产成人综合在线观看 | 国产精品 视频 | 能在线观看的日韩av | 欧美精品一区二区性色 | 91香蕉视频| www色,com| 蜜臀av免费一区二区三区 | 在线色亚洲 | 国产精品精品久久久 | 欧美日韩中 | 久久精品国产精品亚洲精品 | 国产最顶级的黄色片在线免费观看 | 国产在线精品区 | 探花视频网站 | 亚洲 欧美 变态 国产 另类 | 欧洲精品码一区二区三区免费看 | www.色综合.com | 久久免费视频在线观看30 | 日日夜夜爱 | 成人资源在线观看 | 日日干美女 | 亚洲精品视频在线观看免费 | 久久艹国产视频 | 国产 在线观看 | 91综合久久一区二区 | 欧美少妇的秘密 | 国产综合视频在线观看 | 特级毛片在线免费观看 | 国产精品免费视频一区二区 | 麻豆视频网址 | 丁香激情综合久久伊人久久 | 国产精品福利午夜在线观看 | 米奇狠狠狠888 | 亚洲最大的av网站 | 国产不卡高清 | 欧美小视频在线观看 | 久久免费视频5 | 欧美色婷| 又粗又长又大又爽又黄少妇毛片 | 亚洲japanese制服美女 | 中文网丁香综合网 | 国产中文字幕一区 | av高清一区二区三区 | 日本护士三级少妇三级999 | 亚洲国产中文在线 | 亚洲高清视频在线观看免费 | 国产xx在线 | 99久久久久| 黄色中文字幕在线 | 亚洲免费在线观看视频 | 91免费的视频在线播放 | 国产亚洲综合精品 | 不卡的av中文字幕 | 久久免费a | 综合激情网... | 日本大片免费观看在线 | 天天综合网久久综合网 | 天天激情天天干 | 99九九热只有国产精品 | 黄色a三级 | 欧美日韩免费网站 | av大全在线观看 | 在线日本看片免费人成视久网 | 久久精品中文字幕少妇 | 伊人日日干 | 日本精品午夜 | 欧美精品久久 | a视频免费在线观看 | 国产美女精品久久久 | 日本中文字幕在线 | 日韩在线短视频 | 最近免费中文字幕 | 欧美性精品 | 日本成址在线观看 | 国产高清久久 | 国产在线999 | 免费日韩高清 | 欧美国产日韩一区二区三区 | 国产精品 亚洲精品 | 手机看片中文字幕 | 亚洲精品免费在线 | 九九视频免费观看视频精品 | 久久久免费看片 | 婷婷性综合 | 欧美少妇xx | 99综合电影在线视频 | 国产三级久久久 | 久久国产精品视频免费看 | 在线观看a视频 | 日韩色高清| 国产精品正在播放 | 夜夜躁日日躁狠狠久久88av | 麻豆久久久久久久 | 国产高清视频在线观看 | 亚洲电影久久久 | 97色婷婷人人爽人人 | 日韩在线视频一区二区三区 | 超碰97国产精品人人cao | 麻豆视频在线免费看 | 天堂av高清 | av黄色在线播放 | a天堂免费 | 国产精品电影一区 | 综合色站导航 | 久久国产精品99久久久久久进口 | 黄色毛片视频 | 婷婷色在线 | 日韩一区二区三区免费视频 | avove黑丝 | 黄色网址国产 | 国产伦精品一区二区三区高清 | 亚洲自拍av在线 | 日韩欧美aaa | 国产精华国产精品 | 国产精品国内免费一区二区三区 | 99精品区 | 中文av在线播放 | 色在线视频 | 国产色一区 | 99久久毛片| 蜜臀av性久久久久蜜臀aⅴ四虎 | 欧洲亚洲女同hd | 国产群p | 91精品国产九九九久久久亚洲 | 91在线porny国产在线看 | 激情久久一区二区三区 | 色婷婷啪啪免费在线电影观看 | 午夜视频在线观看一区二区三区 | 黄色av一区 | 欧美精品久久久久久久久老牛影院 | 天天干,天天射,天天操,天天摸 | 日韩激情片在线观看 | 国产视频一区二区在线 | 伊人视频 | 国产精品色视频 | 91chinese在线 | 午夜av电影| a级片韩国 | 国产五月婷 | 日韩久久精品一区二区三区下载 | 成人a视频在线观看 | 三级在线视频观看 | 久久官网 | 日本视频网| 成人免费精品 | 国产精品成人国产乱一区 | 久久久精品高清 | 成人免费观看a | www色网站 | 中文字幕亚洲综合久久五月天色无吗'' | 日日躁夜夜躁aaaaxxxx | 国产精品一区久久久久 | 日韩xxxx视频 | 欧美亚洲国产精品久久高清浪潮 | 99精品国产在热久久下载 | 久久激情久久 | 久久久亚洲麻豆日韩精品一区三区 | 国产亚洲精品久久久久久网站 | 干干干操操操 | 欧美伦理电影一区二区 | 全久久久久久久久久久电影 | 色 中文字幕| 91九色网站 | 日韩精品一区二区三区在线视频 | 国产精品久久久久久久久久ktv | 亚洲欧美国产精品久久久久 | 色婷婷综合久久久中文字幕 | 亚洲成人黄色网址 | 色欧美日韩| 亚洲精品动漫在线 | 亚洲另类在线视频 | 91观看视频 | 日韩免费一级a毛片在线播放一级 | 69xxxx欧美| 国产精品久久久久久影院 | 五月天视频网 | 日韩中午字幕 | 久久人人97超碰com | 99福利片| 久久视频免费看 | 在线视频手机国产 | 不卡的av中文字幕 | 精品国产福利在线 | 美女视频黄在线观看 | 91av综合 | 在线观看视频你懂的 | 国产亚洲精品无 | 丁香久久五月 | 91大神视频网站 | 免费看久久 | 亚洲天堂网视频 | 麻豆久久久久 | 色噜噜狠狠狠狠色综合 | www成人精品 | 天天拍天天爽 | 西西大胆啪啪 |