久久精品国产精品国产精品污,男人扒开添女人下部免费视频,一级国产69式性姿势免费视频,夜鲁夜鲁很鲁在线视频 视频,欧美丰满少妇一区二区三区,国产偷国产偷亚洲高清人乐享,中文 在线 日韩 亚洲 欧美,熟妇人妻无乱码中文字幕真矢织江,一区二区三区人妻制服国产

歡迎訪問 生活随笔!

生活随笔

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

编程问答

从程序员角度看ELF

發(fā)布時間:2023/12/18 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 从程序员角度看ELF 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
從程序員角度看ELF

原文:《 ELF:From The Programmer's Perspective》

作者:Hongjiu Lu <mailto: hjl@nynexst.com>
NYNEX Science & Technology, Inc.
500 Westchester Avenue
White Plains, NY 10604, USA

翻譯:alert7 <mailto: alert7@21cn.com
????????????????????? alert7@xfocus.org
???????????? >

主頁: http://www.xfocus.org
時間: 2001-9-10


★概要:

這片文檔從程序員的角度討論了linux的ELF二進制格式。介紹了一些ELF執(zhí)行
文件在運行控制的技術(shù)。展示了如何使用動態(tài)連接器和如何動態(tài)裝載ELF。
我們也演示了如何在LINUX使用GNU C/C++編譯器和一些其他工具來創(chuàng)建共享的
C/C++庫。

★1前言

最初,UNIX系統(tǒng)實驗室(USL)開發(fā)和發(fā)布了Executable and linking Format
(ELF)這樣的二進制格式。在SVR4和Solaris 2.x上,都做為可執(zhí)行文件默認的
二進制格式。ELF比a.out和COFF更強大更靈活。結(jié)合一些適當?shù)墓ぞ?#xff0c;程序員
使用ELF就可以在運行時控制程序的流程。


★2 ELF類型

三種主要的ELF文件類型:

.可執(zhí)行文件:包含了代碼和數(shù)據(jù)。具有可執(zhí)行的程序。
例如這樣一個程序

# file dltest
dltest: ELF 32-bit LSB executable, Intel 80386, version 1,
dynamically linked (uses shared libs), not stripped

.可重定位文件:包含了代碼和數(shù)據(jù)(這些數(shù)據(jù)是和其他重定位文件和共享的
object文件一起連接時使用的)
例如這樣文件

# file libfoo.o
libfoo.o: ELF 32-bit LSB relocatable, Intel 80386, version 1,
?? not stripped

.共享boject文件(又可叫做共享庫):包含了代碼和數(shù)據(jù)(這些數(shù)據(jù)是在連接
時候被連接器ld和運行時動態(tài)連接器使用的)。動態(tài)連接器可能稱為
ld.so.1,libc.so.1 或者 ld-linux.so.1。
例如這樣文件

# file libfoo.so
libfoo.so: ELF 32-bit LSB shared object, Intel 80386, version
1, not stripped

ELF section部分是非常有用的。使用一些正確的工具和技術(shù),程序員就能
熟練的操作可執(zhí)行文件的執(zhí)行。

★3 .init和.fini sections

在ELF系統(tǒng)上,一個程序是由可執(zhí)行文件或者還加上一些共享object文件組成。
為了執(zhí)行這樣的程序,系統(tǒng)使用那些文件創(chuàng)建進程的內(nèi)存映象。進程映象
有一些段(segment),包含了可執(zhí)行指令,數(shù)據(jù),等等。為了使一個ELF文件
裝載到內(nèi)存,必須有一個program header(該program header是一個描述段
信息的結(jié)構(gòu)數(shù)組和一些為程序運行準備的信息)。

一個段可能有多個section組成.這些section在程序員角度來看更顯的重要。

每個可執(zhí)行文件或者是共享object文件一般包含一個section table,該表
是描述ELF文件里sections的結(jié)構(gòu)數(shù)組。這里有幾個在ELF文檔中定義的比較
特別的sections.以下這些是對程序特別有用的:

.fini
該section保存著進程終止代碼指令。因此,當一個程序正常退出時,
系統(tǒng)安排執(zhí)行這個section的中的代碼。
.init
該section保存著可執(zhí)行指令,它構(gòu)成了進程的初始化代碼。
因此,當一個程序開始運行時,在main函數(shù)被調(diào)用之前(c語言稱為
main),系統(tǒng)安排執(zhí)行這個section的中的代碼。

.init和.fini sections的存在有著特別的目的。假如一個函數(shù)放到
.init section,在main函數(shù)執(zhí)行前系統(tǒng)就會執(zhí)行它。同理,假如一
個函數(shù)放到.fini section,在main函數(shù)返回后該函數(shù)就會執(zhí)行。
該特性被C++編譯器使用,完成全局的構(gòu)造和析構(gòu)函數(shù)功能。

當ELF可執(zhí)行文件被執(zhí)行,系統(tǒng)將在把控制權(quán)交給可執(zhí)行文件前裝載所以相關(guān)
的共享object文件。構(gòu)造正確的.init和.fini sections,構(gòu)造函數(shù)和析構(gòu)函數(shù)
將以正確的次序被調(diào)用。

★3.1 在c++中全局的構(gòu)造函數(shù)和析構(gòu)函數(shù)

在c++中全局的構(gòu)造函數(shù)和析構(gòu)函數(shù)必須非常小心的處理碰到的語言規(guī)范問題。
構(gòu)造函數(shù)必須在main函數(shù)之前被調(diào)用。析構(gòu)函數(shù)必須在main函數(shù)返回之后
被調(diào)用。例如,除了一般的兩個輔助啟動文件crti.o和crtn.o外,GNU C/C++
編譯器--gcc還提供兩個輔助啟動文件一個稱為crtbegin.o,還有一個被稱為
crtend.o。結(jié)合.ctors和.dtors兩個section,c++全局的構(gòu)造函數(shù)和析構(gòu)函數(shù)
能以運行時最小的負載,正確的順序執(zhí)行。


.ctors
該section保存著程序的全局的構(gòu)造函數(shù)的指針數(shù)組。

.dtors
該section保存著程序的全局的析構(gòu)函數(shù)的指針數(shù)組。

ctrbegin.o
有四個section:
1 .ctors section
local標號__CTOR_LIST__指向全局構(gòu)造函數(shù)的指針數(shù)組頭。在
ctrbegin.o中的該數(shù)組只有一個dummy元素。

[譯注:
# objdump -s -j .ctors
/usr/lib/gcc-lib/i386-redhat-linux/egcs-2.91.66/crtbegin.o

/usr/lib/gcc-lib/i386-redhat-linux/egcs-2.91.66/crtbegin.o:
file format elf32-i386
Contents of section .ctors:
0000 ffffffff???????????????????????????? ....
這里說的dummy元素應(yīng)該就是指的是ffffffff
]

2 .dtors section
local標號__DTOR_LIST__指向全局析構(gòu)函數(shù)的指針數(shù)組頭。在
ctrbegin.o中的該數(shù)組僅有也只有一個dummy元素。

3 .text section
只包含了__do_global_dtors_aux函數(shù),該函數(shù)遍歷__DTOR_LIST__
列表,調(diào)用列表中的每個析構(gòu)函數(shù)。
函數(shù)如下:

Disassembly of section .text:

00000000 <__do_global_dtors_aux>:
?? 0:?? 55????????????????????? push?? %ebp
?? 1:?? 89 e5?????????????????? mov??? %esp,%ebp
?? 3:?? 83 3d 04 00 00 00 00??? cmpl?? $0x0,0x4
?? a:?? 75 38?????????????????? jne??? 44 <__do_global_dtors_aux+0x44>
?? c:?? eb 0f?????????????????? jmp??? 1d <__do_global_dtors_aux+0x1d>
?? e:?? 89 f6?????????????????? mov??? %esi,%esi
? 10:?? 8d 50 04??????????????? lea??? 0x4(%eax),%edx
? 13:?? 89 15 00 00 00 00?????? mov??? %edx,0x0
? 19:?? 8b 00?????????????????? mov??? (%eax),%eax
? 1b:?? ff d0?????????????????? call?? *%eax
? 1d:?? a1 00 00 00 00????????? mov??? 0x0,%eax
? 22:?? 83 38 00??????????????? cmpl?? $0x0,(%eax)
? 25:?? 75 e9?????????????????? jne??? 10 <__do_global_dtors_aux+0x10>
? 27:?? b8 00 00 00 00????????? mov??? $0x0,%eax
? 2c:?? 85 c0?????????????????? test?? %eax,%eax
? 2e:?? 74 0a?????????????????? je???? 3a <__do_global_dtors_aux+0x3a>
? 30:?? 68 00 00 00 00????????? push?? $0x0
? 35:?? e8 fc ff ff ff????????? call?? 36 <__do_global_dtors_aux+0x36>
? 3a:?? c7 05 04 00 00 00 01??? movl?? $0x1,0x4
? 41:?? 00 00 00
? 44:?? c9????????????????????? leave
? 45:?? c3????????????????????? ret
? 46:?? 89 f6?????????????????? mov??? %esi,%esi


4 .fini section
它只包含一個__do_global_dtors_aux的函數(shù)調(diào)用。請記住,它僅是
一個函數(shù)調(diào)用而不返回的,因為crtbegin.o的.fini section是這個
函數(shù)體的一部分。
函數(shù)如下:
Disassembly of section .fini:

00000000 <.fini>:
?? 0:?? e8 fc ff ff ff????????? call?? 1 <.fini+0x1>


crtend.o
也有四個section:

1 .ctors section
local標號__CTOR_END__指向全局構(gòu)造函數(shù)的指針數(shù)組尾部。

2 .dtors section
local標號__DTOR_END__指向全局析構(gòu)函數(shù)的指針數(shù)組尾部。

3 .text section
只包含了__do_global_ctors_aux函數(shù),該函數(shù)遍歷__CTOR_LIST__
列表,調(diào)用列表中的每個構(gòu)造函數(shù)。
函數(shù)如下:
00000000 <__do_global_ctors_aux>:
?? 0:?? 55????????????????????? push?? %ebp
?? 1:?? 89 e5?????????????????? mov??? %esp,%ebp
?? 3:?? 53????????????????????? push?? %ebx
?? 4:?? bb fc ff ff ff????????? mov??? $0xfffffffc,%ebx
?? 9:?? 83 3d fc ff ff ff ff??? cmpl?? $0xffffffff,0xfffffffc
? 10:?? 74 0c?????????????????? je???? 1e <__do_global_ctors_aux+0x1e>
? 12:?? 8b 03?????????????????? mov??? (%ebx),%eax
? 14:?? ff d0?????????????????? call?? *%eax
? 16:?? 83 c3 fc??????????????? add??? $0xfffffffc,%ebx
? 19:?? 83 3b ff??????????????? cmpl?? $0xffffffff,(%ebx)
? 1c:?? 75 f4?????????????????? jne??? 12 <__do_global_ctors_aux+0x12>
? 1e:?? 8b 5d fc??????????????? mov??? 0xfffffffc(%ebp),%ebx
? 21:?? c9????????????????????? leave
? 22:?? c3????????????????????? ret
? 23:?? 90????????????????????? nop

4 .init section
它只包含一個__do_global_ctors_aux的函數(shù)調(diào)用。請記住,它僅是
一個函數(shù)調(diào)用而不返回的,因為crtend.o的.init section是這個函
數(shù)體的一部分。
函數(shù)如下:
Disassembly of section .init:

00000000 <.init>:
?? 0:?? e8 fc ff ff ff????????? call?? 1 <.init+0x1>


crti.o
在.init section中僅是個_init的函數(shù)標號。
在.fini section中的_fini函數(shù)標號。

crtn.o
在.init和.fini section中僅是返回指令。

Disassembly of section .init:

00000000 <.init>:
?? 0:?? 8b 5d fc??????????????? mov??? 0xfffffffc(%ebp),%ebx
?? 3:?? c9????????????????????? leave
?? 4:?? c3????????????????????? ret
Disassembly of section .fini:

00000000 <.fini>:
?? 0:?? 8b 5d fc??????????????? mov??? 0xfffffffc(%ebp),%ebx
?? 3:?? c9????????????????????? leave
?? 4:?? c3????????????????????? ret

編譯產(chǎn)生可重定位文件時,gcc把每個全局構(gòu)造函數(shù)掛在__CTOR_LIST上
(通過把指向構(gòu)造函數(shù)的指針放到.ctors section中)。
它也把每個全局析構(gòu)函掛在__DTOR_LIST上(通過把指向析構(gòu)函的指針
放到.dtors section中)。

連接時,gcc在所有重定位文件前處理crtbegin.o,在所有重定位文件后處理
crtend.o。另外,crti.o在crtbegin.o之前被處理,crtn.o在crtend.o之后
被處理。

當產(chǎn)生可執(zhí)行文件時,連接器ld分別的連接所有可重定位文件的ctors 和
.dtors section到__CTOR_LIST__和__DTOR_LIST__列表中。.init section
由所有的可重定位文件中_init函數(shù)組成。.fini由_fini函數(shù)組成。

運行時,系統(tǒng)將在main函數(shù)之前執(zhí)行_init函數(shù),在main函數(shù)返回后執(zhí)行
_fini函數(shù)。


★4 ELF的動態(tài)連接與裝載

★4.1 動態(tài)連接

當在UNIX系統(tǒng)下,用C編譯器把C源代碼編譯成可執(zhí)行文件時,c編譯驅(qū)動器一般
將調(diào)用C的預處理,編譯器,匯編器和連接器。

. c編譯驅(qū)動器首先把C源代碼傳到C的預處理器,它以處理過的宏和
指示器形式輸出純C語言代碼。

. c編譯器把處理過的C語言代碼翻譯為機器相關(guān)的匯編代碼。

. 匯編器把結(jié)果的匯編語言代碼翻譯成目標的機器指令。結(jié)果這些
機器指令就被存儲成指定的二進制文件格式,在這里,我們使用的
ELF格式。

. 最后的階段,連接器連接所有的object文件,加入所有的啟動代碼和
在程序中引用的庫函數(shù)。

下面有兩種方法使用lib庫

--static library
一個集合,包含了那些object文件中包含的library例程和數(shù)據(jù)。用
該方法,連接時連接器將產(chǎn)生一個獨立的object文件(這些
object文件保存著程序所要引用的函數(shù)和數(shù)據(jù))的copy。

--shared library
是共享文件,它包含了函數(shù)和數(shù)據(jù)。用這樣連接出來的程序僅在可執(zhí)行
程序中存儲著共享庫的名字和一些程序引用到的標號。在運行時,動態(tài)
連接器(在ELF中也叫做程序解釋器)將把共享庫映象到進程的虛擬
地址空間里去,通過名字解析在共享庫中的標號。該處理過程也稱為
動態(tài)連接(dynamic linking)

程序員不需要知道動態(tài)連接時用到的共享庫做什么,每件事情對程序員都是
透明的。


★4.2 動態(tài)裝載(Dynamic Loading)

動態(tài)裝載是這樣一個過程:把共享庫放到執(zhí)行時進程的地址空間,在庫中查找
函數(shù)的地址,然后調(diào)用那個函數(shù),當不再需要的時候,卸載共享庫。它的執(zhí)行
過程作為動態(tài)連接的服務(wù)接口。

在ELF下,程序接口通常在<dlfcn.h>中被定義。如下:

void *dlopen(const char * filename,int flag);
const char * dlerror(void);
const void * dlsym (void handle*,const char * symbol);
int dlclose(void * handle);

這些函數(shù)包含在libdl.so中。下面是個例子,展示動態(tài)裝載是如何工作的。
主程序在運行時動態(tài)的裝載共享庫。一方面可指出哪個共享庫被使用,哪個
函數(shù)被調(diào)用。一方面也能在訪問共享庫中的數(shù)據(jù)。

[alert7@redhat62 dl]# cat dltest.c
#include <stdio.h>
#include <stdlib.h>
#include <getopt.h>
#include <dlfcn.h>
#include <ctype.h>

typedef void (*func_t) (const char *);

void dltest(const char *s)
{
printf("From dltest:");
for (;*s;s++)
{
putchar(toupper(*s));
}
putchar('/n');
}

main(int argc,char **argv)
{
void *handle;
func_t fptr;
char * libname = "./libfoo.so";
char **name=NULL;
char *funcname = "foo";
char *param= "Dynamic Loading Test";
int ch;
int mode=RTLD_LAZY;

while ((ch = getopt(argc,argv,"a:b:f:l:"))!=EOF)
{
switch(ch)
{
case 'a':/*argument*/
param=optarg;
break;
case 'b':/*how to bind*/
switch(*optarg)
{
case 'l':/*lazy*/
mode = RTLD_LAZY;
break;
case 'n':/*now*/
mode = RTLD_NOW;
break;
}
break;
case 'l':/*which shared library*/
libname= optarg;
break;
case 'f':/*which function*/
funcname= optarg;
}
?? }

handle = dlopen(libname,mode);
if (handle ==NULL)
{
fprintf(stderr,"%s:dlopen:'%s'/n",libname,dlerror());
exit(1);
}

fptr=(func_t)dlsym(handle,funcname);
if (fptr==NULL)
{
fprintf(stderr,"%s:dlsym:'%s'/n",funcname,dlerror());
exit(1);
}


name = (char **) dlsym(handle,"libname");
if (name==NULL)
{
fprintf(stderr,"%s:dlsym:'libname'/n",dlerror());
exit(1);
}

printf("Call '%s' in '%s':/n",funcname,*name);

/*call that function with 'param'*/
(*fptr)(param);

dlclose(handle);
return 0;

}

這里有兩個共享庫,一個是libfoo.so一個是libbar.so。每個都用同樣的全局
字符串變量libname,分別各自有foo和bar函數(shù)。通過dlsym,對程序來說,他們
都是可用的。

[alert7@redhat62 dl]# cat libbar.c
#include <stdio.h>

extern void dltest(const char *);
const char * const libname = "libbar.so";

void bar (const char *s)
{
dltest("Called from libbar.");
printf("libbar:%s/n",s);
}


[alert7@redhat62 dl]# cat libfoo.c
#include <stdio.h>

extern void dltest (const char *s);
const char *const libname="libfoo.so";

void foo(const char *s)
{
const char *saved=s;

dltest("Called from libfoo");
printf("libfoo:");
for (;*s;s++);
for (s--;s>=saved;s--)
{
putchar (*s);
}
putchar ('/n');
}

使用Makefile文件來編譯共享庫和主程序是很有用的。因為libbar.so和
libfoo.so也調(diào)用了主程序里的dltest函數(shù)。

[alert7@redhat62 dl] #cat Makefile
CC=gcc
LDFLAGS=-rdynamic
SHLDFLAGS=
RM=rm

all:dltest

libfoo.o:libfoo.c
$(CC) -c -fPIC $<

libfoo.so:libfoo.o
$(CC) $(SHLDFLAGS) -shared -o $@ $^

libbar: libbar.c
$(CC) -c -fPIC $<

libbar.so:libbar.o
$(CC) $(SHLDFLAGS) -shared -o $@ $^

dltest: dltest.o libbar.so libfoo.so
$(CC) $(LDFLAGS) -o $@ dltest.o -ldl

clean:
$(RM) *.o *.so dltest

處理流程:

[alert7@redhat62 dl]# export ELF_LD_LIBRARY_PATH=.
[alert7@redhat62 dl]# ./dltest
Call 'foo' in 'libfoo.so':
From dltest:CALLED FROM LIBFOO
libfoo:tseT gnidaoL cimanyD
[alert7@redhat62 dl]# ./dltest -f bar
bar:dlsym:'./libfoo.so: undefined symbol: bar'
[alert7@redhat62 dl]# ./dltest -f bar -l ./libbar.so
Call 'bar' in 'libbar.so':
From dltest:CALLED FROM LIBBAR.
libbar:Dynamic Loading Test


在動態(tài)裝載進程中調(diào)用的第一個函數(shù)就是dlopen,它使得共享可庫對
運行著的進程可用。dlopen返回一個handle,該handle被后面的dlsym
和dlclose函數(shù)使用。dlopen的參數(shù)為NULL有特殊的意思---它使得在
程序?qū)С龅臉颂柡彤斍耙呀?jīng)裝載進內(nèi)存的共享庫導出的標號通過dlsym
就可利用。

在一個共享庫已經(jīng)裝載進運行著的進程的地址空間后,dlsym可用來
獲得在共享庫中導出的標號地址。然后就可以通過dlsym返回的地址
來訪問里面的函數(shù)和數(shù)據(jù)。

當一個共享庫不再需要使用的時候,就可以調(diào)用dlclose卸載該函數(shù)庫。
假如共享庫在啟動時刻或者是通過其他的dlopen調(diào)用被裝載的話,該
共享庫不會從調(diào)用的進程的地址空間被移走。

假如dlclose操作成功,返回為0。dlopen和dlsym如果有錯誤,將返回
為NULL。為了獲取診斷信息,可調(diào)用dlerror.


★5 支持ELF的LINUX上的編譯器GNU GCC

感謝Eric Youngdale (eric@aib.com),lan Lance Taylor (ian@cygnus.com)
還有許多為gcc支持ELF功能的默默做貢獻的人。我們能用gcc和GNU的二進制
工具很容易的創(chuàng)建ELF可執(zhí)行文件和共享庫。

★5.1 共享C庫 Shared C Library

在ELF下構(gòu)造一個共享庫比其他的容易的多。但是需要編譯器,匯編器,
連接器的支持。首先,需要產(chǎn)生位置無關(guān)(position-independent)代碼。
要做到這一點,gcc需要加上編譯選項-fPIC
[alert7@redhat62 dl]# gcc -fPIC -O -c libbar.c

這時候就適合構(gòu)造共享庫了,加上-shared編譯選項
[alert7@redhat62 dl]# gcc -shared -o libbar.so libbar.o

現(xiàn)在我們構(gòu)造的libbar.so就可以被連接器(link editor)和動態(tài)連接器
(dynamic linker)。只要編譯時帶上-fPIC編譯選項,可以把許多重定位
文件加到共享庫中。為了把baz.o和共享庫連接在一起,可以如下操作:
# gcc -O -c baz.c
# gcc -o baz baz.o -L. -lbar

在把libbar.so安裝到動態(tài)連接器能找到的正確位置上之后,運行baz將
使libbar.so映象到baz的進程地址空間。內(nèi)存中l(wèi)ibbar.so的一份拷貝將
被所有的可執(zhí)行文件(這些可執(zhí)行程序連接時和它一塊兒連接的或者
在運行時動態(tài)裝載的)共享。

★5.2 共享C++庫 Shared C++ Library

在共享c++庫中主要的困難是如何對待構(gòu)造函數(shù)和析構(gòu)函數(shù)。
在SunOS下,構(gòu)造和使用一個共享的ELF C庫是容易的,但是在SunOS下不能
構(gòu)造共享的C++庫,因為構(gòu)造函數(shù)和析構(gòu)函數(shù)有特別的需求。為止,在ELF
中的.init和.init section提供了完美的解決方法。

當構(gòu)造共享C++庫時,我們使用crtbegin.o和crtend.o這兩個特殊的版本,
(它們已經(jīng)是經(jīng)過-fPIC的)。對于連接器(link editor)來說,構(gòu)造共享
的C++庫幾乎是和一般的可執(zhí)行文件一樣的。全局的構(gòu)造函數(shù)和析構(gòu)函數(shù)
被.init和.fini section處理(在上面3.1節(jié)中已經(jīng)討論過)。

但一個共享庫被映射到進程的地址空間時,動態(tài)連接器將在傳控制權(quán)給程序
之前執(zhí)行_init函數(shù),并且將為_fini函數(shù)安排在共享庫不再需要的時候被
執(zhí)行。

連接選項-shared是告訴gcc以正確的順序放置必要的輔助文件并且告訴它將
產(chǎn)生一個共享庫。-v選項將顯示什么文件什么選項被傳到了連接器
(link editor).

[alert7@redhat62 dl]# gcc -v -shared -o libbar.so libbar.o
Reading specs from /usr/lib/gcc-lib/i386-redhat-linux/egcs-2.91.66/specs
gcc version egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)
/usr/lib/gcc-lib/i386-redhat-linux/egcs-2.91.66/collect2 -m elf_i386
-shared -o libbar.so /usr/lib/crti.o /usr/lib/gcc-lib/i386-redhat
-linux/egcs-2.91.66/crtbeginS.o
-L/usr/lib/gcc-lib/i386-redhat-linux/egcs-2.91.66
-L/usr/i386-redhat-linux/lib libbar.o -lgcc -lc --version-script
/usr/lib/gcc-lib/i386-redhat-linux/egcs-2.91.66/libgcc.map
-lgcc /usr/lib/gcc-lib/i386-redhat-linux/egcs-2.91.66/crtendS.o
/usr/lib/crtn.o

crtbeginS.o和crtendS.o用-fPIC編譯的兩個特殊的版本。帶上-shared
創(chuàng)建共享庫是重要的,因為那些輔助的文件也提供其他服務(wù)。我們將在
5.3節(jié)中討論。

★5.3 擴展的GCC特性

GCC有許多擴展的特性。有些對ELF特別的有用。其中一個就是__attribute__。
使用__attribute__可以使一個函數(shù)放到__CTOR_LIST__或者__DTOR_LIST__里。
例如:

[alert7@redhat62 dl]# cat miss.c

#include <stdio.h>
#include <stdlib.h>

static void foo(void) __attribute__ ((constructor));
static void bar(void) __attribute__ ((destructor));


int main(int argc, char *argv[])
{
??????? printf("foo == %p/n", foo);
??????? printf("bar == %p/n", bar);

??????? exit(EXIT_SUCCESS);
}

void foo(void)
{
??????? printf("hi dear njlily!/n");
}

void bar(void)
{
??????? printf("missing u! goodbye!/n");
}

[alert7@redhat62 dl]# gcc -o miss miss.c
[alert7@redhat62 dl]# ./miss
hi dear njlily!
foo == 0x8048434
bar == 0x8048448
missing u! goodbye!

我們來看看是否加到了.ctors和.dtors中。
[alert7@redhat62 dl]# objdump -s -j .ctors miss

miss:???? file format elf32-i386

Contents of section .ctors:
8049504 ffffffff 34840408 00000000?????????? ....4.......

[alert7@redhat62 dl]# objdump -s -j .dtors miss

miss:???? file format elf32-i386

Contents of section .dtors:
8049510 ffffffff 48840408 00000000?????????? ....H.......

已經(jīng)把foo和bar地址分別放到了.ctors和.dors,顯示34840408只是因為
x86上是LSB編碼的,小端序。

__attribute__ ((constructor))促使函數(shù)foo在進入main之前會被自動調(diào)用。
__attribute__ ((destructor))促使函數(shù)bar在main返回或者exit調(diào)用之后
會被自動調(diào)用。foo和bar必須是不能帶參數(shù)的而且必須是static void類型的
函數(shù)。在ELF下,這個特性在一般的可執(zhí)行文件和共享庫中都能很好的工作。


我們也可以創(chuàng)建自己的section,在這里我創(chuàng)建了一個alert7 section.
[alert7@redhat62 dl]# cat test.c
#include <stdio.h>
#include <stdlib.h>

static void foo(void) __attribute__ ((section ("alert7")));
static void bar(void) __attribute__ ((section ("alert7")));


int main(int argc, char *argv[])
{
??????? foo();

??????? printf("foo == %p/n", foo);
??????? printf("bar == %p/n", bar);
??????? bar();
??????? exit(EXIT_SUCCESS);
}

void foo(void)
{
??????? printf("hi dear njlily!/n");
}
void bar(void)
{
??????? printf("missing u! goodbye!/n");
}
[alert7@redhat62 dl]# gcc -o test test.c
[alert7@redhat62 dl]# ./test
hi dear njlily!
foo == 0x804847c
bar == 0x8048490
missing u! goodbye!

[alert7@redhat62 dl]# objdump -x test
....
Sections:
Idx Name????????? Size????? VMA?????? LMA?????? File off? Algn
? 0 .interp?????? 00000013? 080480f4? 080480f4? 000000f4? 2**0
????????????????? CONTENTS, ALLOC, LOAD, READONLY, DATA
...
12 alert7??????? 00000026? 0804847c? 0804847c? 0000047c? 2**2
????????????????? CONTENTS, ALLOC, LOAD, READONLY, CODE
...

[alert7@redhat62 dl]# objdump -D test
Disassembly of section alert7:

0804847c <foo>:
804847c:?????? 55????????????????????? push?? %ebp
804847d:?????? 89 e5?????????????????? mov??? %esp,%ebp
804847f:?????? 68 de 84 04 08????????? push?? $0x80484de
8048484:?????? e8 a3 fe ff ff????????? call?? 804832c <_init+0x70>
8048489:?????? 83 c4 04??????????????? add??? $0x4,%esp
804848c:?????? c9????????????????????? leave
804848d:?????? c3????????????????????? ret
804848e:?????? 89 f6?????????????????? mov??? %esi,%esi

08048490 <bar>:
8048490:?????? 55????????????????????? push?? %ebp
8048491:?????? 89 e5?????????????????? mov??? %esp,%ebp
8048493:?????? 68 ef 84 04 08????????? push?? $0x80484ef
8048498:?????? e8 8f fe ff ff????????? call?? 804832c <_init+0x70>
804849d:?????? 83 c4 04??????????????? add??? $0x4,%esp
80484a0:?????? c9????????????????????? leave
80484a1:?????? c3????????????????????? ret

在這里,我創(chuàng)建了一個自己的alert7 section,并把foo,bar兩個函數(shù)放到了這個
section中。一般定義的函數(shù)都會放在.text section中。



★5.3.1 在C庫中的初始化函數(shù)

另外一個GCC的特性是__attribute__( section ("sectionname") ).使用這個,
能把一個函數(shù)或者是數(shù)據(jù)結(jié)構(gòu)放到任何的section中。

static void
foo (int argc,char **argc,char **envp)
__attribute__ ((section ("_libc_foo")));

static void
foo (int argc,char **argv,char **envp)
{
}

static void
bar (int argc,char **argv,char **envp)
{
}

static void * __libc_subinit_bar__
__attribute__ (( section ("_libc_subinit")))=&(bar);

這里,我們把foo放到了_libc_foo section,把__libc_subinit_bar__放
到了_libc_subinit section中。在Linux C庫中,_libc_subinit 是一個特別
的section,它包含了一個函數(shù)指針(有如下原型)的數(shù)組。

void (*) (int argc,char **argv,char **envp);

這里的argc,argv,envp跟在main中的有同樣的意義。該section中的函數(shù)在進入
main函數(shù)之前就會被調(diào)用。這是很有用的,可用來在Linux C庫中初始化一些
全局變量。

[譯注:_libc_subinit section真有這個特別的功能嗎?我是沒有試
成功,如果有人試成功或者認為我理解有誤的地方,千萬記得mail給
我:)
測試程序如下:
#include <stdio.h>
#include <stdlib.h>
static void foo(int argc,char **argv,char **envp)
{
printf("hi dear njlily!/n");
}

int main(int argc, char *argv[])
{
??????? printf("foo == %p/n", foo);
??????? exit(EXIT_SUCCESS);
}

static void * __libc_subinit_bar__
??????? __attribute__ (( section ("_libc_subinit")))=&(foo);

[alert7@redhat62 dl]# gcc -o test1 test1.c
[alert7@redhat62 dl]# ./test1
foo == 0x8048400
:( 用objdump,顯示已經(jīng)創(chuàng)建了一個_libc_subinit section,并且
該section前四個字節(jié)就是foo地址0x8048400

]



★5.4 利用GCC和GNU ld

這一些命令行的選項對GCC和GNU ld創(chuàng)建ELF時特別有用。-shared告訴gcc
產(chǎn)生一個共享庫,該共享庫能在連接時和其他的共享文件一起形成可執(zhí)行
文件,該共享庫也能在運行時裝載進可執(zhí)行文件的地址空間。使用-shared
是創(chuàng)建一個共享ELF庫的首選方法。

另外一個有用的命令行選項是-Wl,ldoption,傳遞參數(shù)ldoption作為連接器
的選項。假如ldoption包含多個逗號,將分離成多個選項。

-static選項將產(chǎn)生一個和static庫一道連接的可執(zhí)行文件。當沒有開啟
-static選項時,連接器首先試著用共享庫,假如共享版本不可用,然后
再試著用靜態(tài)(static)庫。

這里還有些特別的命令行選項對ELF來說特別的或者說是有用的。

-dynamic-linker file
設(shè)置動態(tài)連接器(dynamic linker)的名字。默認的動態(tài)連接器
或者是/usr/lib/libc.so.1或者是/usr/lib/libd1.so.1


-export-dynamic
告訴連接器使在可執(zhí)行文件中的所有標號對動態(tài)連接器可用。當一個
動態(tài)裝載進的共享庫參考可執(zhí)行文件中的標號,該標號一般在動態(tài)連
接時是不可用時,這時候就特別有用。

-lfile
加文件到需要連接的列表中。該選項可用在許多時候。ld將搜索它的
path-list查找文件libfile.so(也就是說假如庫為libbar.so,那么
使用的時候就這樣使用,-lbar),或者libfile.a(static版本的)。
一些情況下,共享庫名libfile.so會被存儲在resulting executable
或者是共享庫中。當resulting executable或者是共享庫被裝載進內(nèi)
存,動態(tài)連接器也將把使用記錄過的共享庫裝載到進程的地址空間去。
在以后的事情情況下,把必要的函數(shù)和數(shù)據(jù)被拷貝到可執(zhí)行文件,減
少代碼長度。

-m emulation
仿效emulation連接器r.-V參數(shù)可列出所有可用的選項.

-M | -Map mapfile
把連接map輸出到標準輸出或者一個mapfile文件里,該連接map含有
關(guān)于標號被ld映象到了哪里的一些診斷信息,還有全局共同的存儲
分配信息。

-rpath directory
加一個目錄到運行時library的搜索路徑。所有的-rpath參數(shù)被連接
在一起然后傳給動態(tài)連接器。它們被用來在運行時定位共享庫。

-soname name
當創(chuàng)建一個共享庫時,指定的名字被放在共享庫中。當和這個共享
庫連接的可執(zhí)行文件被運行,動態(tài)連接器將試著map記錄著的指定
名字的共享庫而不是傳給連接器的文件名。

-static
告訴連接器不要和任何共享庫連接。

-verbose
告訴連接器打印它每個要打開的文件名。

linux下gcc beta版本使用-dynamic-linker file選項設(shè)置動態(tài)連接器為
/lib/ld-linker.so.1。該選項可以使ELF和a.out共享庫很好的共存。

有件事情是另人感興趣的。

[alert7@redhat62 dl]# gcc -shared -o libbar.so libbar.o -lfoo

假如libfoo.so被用來創(chuàng)建共享庫時,有趣的時候就會發(fā)生了。當libbar.so
被映象到進程的地址空間的時候,動態(tài)連接器也把libfoo.so映象到內(nèi)存。
假如libbar.so需要libfoo.so的時候,這個特性非常有用。實際上使用
libbars.o庫的程序編譯時是不需要-lfoo的。假如archive版本的libfoo.a
被使用,當在libbar.a中的標號被libbar.o引用時,它將會被搜索到。假使在
libbar.so中包含libfoo.a甚至它們根本不被libbar.o使用,在這樣的情況下
必須逐步把.o文件加到libbar.o中:

# rm -rf /tmp/foo
# mkdir /tmp/foo
# (cd /tmp/foo/;ar -x ....../libfoo.a)
# gcc -shared -o libbar.so libbar.o /tmp/foo/*.o
# rm -rf /tmp/foo

在libfoo.a中的.o文件必須用-fPIC編譯或者至少和PIC(位置無關(guān))是
兼容的。

當使用

static void * __libc_subinit_bar__
__attribute__ ((section ("_libc_subinit")))=&(bar);

來把一個標號放到一個沒有被連接器定義的section中(在這里是
_libc_subinit).連接器將所有在_libc_subinit section中的標號共同
創(chuàng)建兩個標號,一個是__start__libc_subinit和__stop__libc_subinit,
它們作為C的標志符被使用。

警告:
下面是完全可能的:連接器可能不能搜索到包含_libc_subinit section
的文件(該section中沒有程序執(zhí)行需要的標號)。這就使程序要確定使
_libc_subinit section能被連接器搜索得到。

一種解決的辦法是:把一個dummy標號放到_libc_subinit section中,
在文件中定義它,使它參考引用_libc_subinit section.


★5.5 Linux下的ELF

在Linux下ELF的執(zhí)行有獨特的特性,這些特性對Linux的使用者來說是很有用
的。一些Linux自己的擴展跟Solaris ELF的執(zhí)行很類似。

★5.5.1 ELF的宏(macros)

<gnu-stabs.h>中,定義了能維護標號的一些宏。

elf_alias(name1,name2)
為標號name1定義一個化名name2.當文件中標號名已經(jīng)被定義的時候
應(yīng)該是有很用的。

weak_alias(name1,name2)
為標號name1定義一個弱化名name2。僅當name2沒有在任何地方定義
時,連接器就會用name1解析name2相關(guān)的符號。在文件中定義的
標號name1也會同樣處理。

elf_set_element(set,symbol)
強迫標號成為set集合的元素。為每個set集合創(chuàng)建一個section.

symbol_set_declare(set)
在該模塊中宣告一個集合set.事實上宣告了兩個標號:
1? 一個set的開始標號
extern void * const __start_set
2? 一個set的結(jié)尾標號
extern void * const __stop_set

symbol_set_first_element(set)
返回一個指針(void * const *),指向set集合第一個元素。

symbol_set_end_p(set,ptr)
假如ptr(void * const *)逐漸增加指向set的最后一個元素,
就返回為true.

使用這些宏,程序員能任意從不同的源文件中創(chuàng)建列表。


★5.5.2 library(庫)的定位和搜索路徑

在Linux下,大部分系統(tǒng)的library庫被安裝在/usr/lib目錄下。只有一些
基本的共享庫被安裝在/lib目錄下。例如:libc.so,libcurses.so,libm.so
,libtermcap.so(各個版本對應(yīng)的文件會有些不同),在其他部分被mount上
之前,那些文件是啟動Linux系統(tǒng)所必須的。連接器默認的搜索路徑是
/lib,/usr/lib,/usr/local/lib,/usr/i486-linux/lib。

環(huán)境變量LD_LIBRARY_PATH也可保存目錄列表,用(:)分開,該變量被動態(tài)
連接器檢查并用該變量指出的目錄查找共享庫。
例如:/usr/X11R6/lib:/usr/local/lib:告訴動態(tài)連接器查找共享庫除了
現(xiàn)在在默認的目錄查找外,然后在/usr/X11R6/lib目錄,然后再是
/usr/local/lib目錄,然后再是當前目錄。

新的環(huán)境變量ELF_LD_LIBRARY_PATH扮演著和LD_LIBRARY_PATH類似的角色。
因為LD_LIBRARY_PATH也被老的a.out DLL linux的共享庫使用。為了避免
來自DLL連接器的不必要的警告,對于在Linux下ELF的動態(tài)連接器來說,
最好使用LD_LIBRARY_PATH環(huán)境變量。

另外一個特性是/etc/ld.so.conf文件,該文件包含了一些目錄列表。
例如:

/usr/X11R6/lib
/usr/lib
/usr/kerberos/lib
/usr/i486-linux-libc5/lib
/usr/lib/gconv
/usr/lib/qt-2.1.0/lib
/usr/lib/qt-1.45/lib

程序ldconfig將把/etc/ld.so.conf文件中列出的搜索目錄中的所有的
共享庫存儲到/etc/ld.so.cache中。假如共享庫已經(jīng)被從默認的目錄中
移走,Linux ELF動態(tài)連接庫將在/etc/ld.so.cache文件中找該共享庫。



★5.5.3 共享庫的版本

在ELF系統(tǒng)上,假如兩個共享庫有同樣的應(yīng)用程序二進制接口(ABI)的子集
的話,對那些僅僅使用那些ABI子集的程序來說,這兩個共享庫是可以互相
通用的(當然那兩個共享庫有同樣的函數(shù)功能)。

當一個庫被改變,只要新的ABI和前面一個版本的共享庫有100%的兼容的話,
所有和前面版本連接的程序在新的共享庫下也能很好的運行。為了支持這,
foo庫必須小心的維護:

1.這個共享庫應(yīng)該如下構(gòu)造:

[alert7@redhat62 dl]# gcc -shared -Wl,-soname,libfoo.so.major /
-o libfoo.so.major.minor.patch-level libfoo.o

動態(tài)連接器運行時將試著定位和映象libfoo.so.major而不管事實上用的共享
文件名libfoo.so.major.patch-level。

2.一個符號連接應(yīng)該指向正確的共享庫

[alert7@redhat62 dl]# ln -s libfoo.so.major.minor.patch-level /
libfoo.so.major

3.當ABI改變和原來版本不兼容的時,主(major)版本號應(yīng)該升級。

當搜索共享庫的時候,Linux連接器將使用最新的共享庫(它們有最高的
major,minor和patch level的版本號)。


★5.5.4 共享(shared)庫和靜態(tài)(static)庫的混合連接

默認情況下,假如共享庫可用,連接器會使用共享庫。但是-Bdynamic和
-Bstatic提供了很好控制庫的方法。它們可以決定用共享庫還是用靜態(tài)庫。

傳-Bdynamic和-Bstatic選項給連接器,如下操作:
# gcc -o main main.o -Wl,-Bstatic /
-lfoo -Wl,-Bdynamic -lbar

# gcc -o main main.o -Wl,-Bstatic
告訴連接器所有的庫(象libc等等)都使用靜態(tài)的版本。


★5.5.5 裝載附加的共享庫

在ELF系統(tǒng)上,為了執(zhí)行一個ELF文件,內(nèi)核要把控制權(quán)交給動態(tài)連接器
ld-linux.so.1(在linux上動態(tài)連接器是ld-linux.so.1,版本不同也會不同的,
在默認的redhat6.2上是/lib/ld-linux.so.2)。在絕對路徑/lib/ld-linux.so.1
以二進制存放著。假如動態(tài)連接器不存在,沒有哪個ELF可執(zhí)行文件能運行。

動態(tài)連接器執(zhí)行以下一個步驟完成從程序到進程映象:

1.分析可執(zhí)行文件中的動態(tài)信息section,決定需要哪些庫。

2.定位和映象(map)那些共享庫,并且分析它們動態(tài)信息section
? 決定是否需要附加的共享庫。

3.為可執(zhí)行程序和那些需要的共享庫執(zhí)行重定位。

4.調(diào)用共享庫中提供的任何初始化函數(shù)并且安排共享庫提供的
? 清除(cleanup)函數(shù)在共享庫卸栽出進程空間的時候運行。

5.傳控制給程序

6.為應(yīng)用程序提供函數(shù)的遲延裝定服務(wù)

7.為應(yīng)用程序提供動態(tài)轉(zhuǎn)載服務(wù)。

環(huán)境變量LD_PRELOAD設(shè)置共享庫名或者用":"把文件名隔開。動態(tài)連接器在
任何那些請求的共享庫之前把環(huán)境變量LD_PRELOAD的共享庫裝載到進程地址
空間去。例如:

# LD_PRELOAD=./mylibc.so myprog

這里./mylibc.so將第一時間map到程序myprog的空間。因為動態(tài)連接器在找
尋標號的時候總是使用第一次碰到的標號,所以我們可以使用LD_PRELOAD來
覆蓋標準共享庫中的函數(shù)。這個特性對程序員來說是很有用的,可用來在還
沒有建好整個共享庫的時候?qū)蝹€函數(shù)功能先做調(diào)試實驗。

我們可以這樣:
#gcc -c -fPIC -O3 print.c
#gcc -shared print.o -o print.so.1.0
創(chuàng)建自己的共享連接庫

★5.5.6 Linux下動態(tài)裝載(Dynamic loading)

_dlinfo是動態(tài)連接接口庫的一個函數(shù)。它列出所有映射到執(zhí)行程序和通過
dlopen打開的每個共享庫。它的輸出類試以下:

List of loaded modules
00000000 50006163 50006200 Exe 1
50007000 5000620c 50006200 Lib 1 /lib/elf/libd1.so.1
5000a000 500062c8 50006200 Lib 2 /lib/elf/libc.so.4
50000000 50006000 00000000 Int 1 /lib/elf/ld-linux.so.1
500aa000 08006f00 08005ff0 Mod 1 ./libfoo.so

Modules for application (50006200):
50006163
5000620c /lib/elf/libdl.so.1
500062c8 /lib/elf/libc.so.4
50006000 /lib/ld-linux.so.1
Modules for handle 8005ff0
08006f00 ./libfoo.so
500062c8 /lib/elf/lib.so.4
50006163
5000620c /lib/elf/libd1.so.1
500062c8 /lib/elf/libc.so.4
50006000 /lib/elf/ld-linux.so.1

以上可被用來解釋動態(tài)的連接和動態(tài)的裝載。

在linux支持ELF上配置的GCC假如使用了-rdynamic選項,它將把
-export-dynamic傳給連接器。強烈建議使用動態(tài)裝載。這就是為什么在
我們的Makefile例子中使用了LDFLAGS=-rdynamic。暫時,這個選項只能在
linux下使用。但是-Wl,-export-dynamic能在其他的平臺上把-export-dynamic
傳給GNU的連接器。

你能在GNU link editor的[3]和[4]部分找到它詳細的描述。


★6 位置無關(guān)代碼(PIC)的匯編語言編程

當用gcc指定-fPIC的時候,gcc將從C源代碼中產(chǎn)生PIC的匯編語言代碼。但有
時候,我們需要用匯編語言來產(chǎn)生PIC代碼。

在ELF下,PIC的實現(xiàn)是使用基寄存器(base register)。在PIC下,所有的
標號引用都是通過基寄存器實現(xiàn)的,為此,要用匯編寫PIC的話,必須保存
基寄存器(base register)。由于位置無關(guān)代碼,控制傳送指令的目的地址
必須被替換或者是在PIC情況下計算的。對X86機器來說,該基寄存器
(base register)就是ebx.這里我們將介紹在X86上安全的PIC匯編代碼的
兩種方法。這些技術(shù)在Linux C庫中也被使用到。


★6.1 在C中內(nèi)嵌匯編

gcc支持內(nèi)嵌匯編的聲明,可讓程序員在C語言中使用匯編語言。當寫LINUX系
統(tǒng)調(diào)用接口的時候這是很有用的,而無須使用機器相關(guān)指令。

在linux 下系統(tǒng)調(diào)用是通過int $0x80的。一般的,系統(tǒng)調(diào)用會有三個參數(shù):

#include <sys/syscall.h>

extern int errno;

int read( int fd,void *buf ,size count)
{
long ret;

__asm__ __volatile__ ("int $0x80"
:"=a"(ret)
:"O"(SYS_read),"b"((long)fd),
"c"((long)buf),"d"((long)count):"bx");

if (ret>=0)
{
return (int) ret:
}
errno=-ret;
retrun -1;
}

以上匯編代碼把系統(tǒng)調(diào)用號SYS_read放到了eax中,fd到ebx中,buf到
ecx中,count到edx中,從int $0x80中返回值ret放在eax中。在不用
-fPIC的情況下,這樣定義運行良好。帶-fPIC的gcc應(yīng)該要檢查ebx是否被
被改變,并且應(yīng)該在匯編代碼里保存和恢復ebx。但是不幸的是,事實上不是
這樣的。我們?yōu)榱酥С諴IC必須自己寫匯編代碼。

#include <sys/syscall.h>

extern int errno;

int read( int fd,void *buf ,size count)
{
long ret;

__asm__ __volatile__ ("pushl %%ebx/n/t"
"movl %%esi,%%ebx/n/t"
"int $0x80/n/t"
"popl %%ebx"
:"=a"(ret)
:"O"(SYS_read),"S"((long)fd),
"c"((long)buf),"d"((long)count):"bx");

if (ret>=0)
{
return (int) ret:
}
errno=-ret;
return -1;
}

這里首先把fd放到esi中,然后保存ebx,把esi移到ebx,在int $0x80后恢復
ebx。這樣保證ebx不被改變(除了在int $0x80中斷調(diào)用中)。同樣的原則也
適用于其他內(nèi)嵌的匯編。

在任何時候,當ebx可能要被改變時,千萬要記得保存和恢復ebx.


★6.2 用匯編語言編程

假如我們在系統(tǒng)調(diào)用時需要傳5個參數(shù)時候,內(nèi)嵌的匯編代碼即使是PIC
的,也不能工作,因為x86沒有足夠的寄存器。我們需要直接用匯編語言
編寫。

syscall(int syscall_number,...)的一般匯編代碼如下:

.file "syscall.S"
.text
.global syscall
.global errno
.align 16

syscall:
pushl 5ebp
movl %esp,%ebp
pushl %edi
pushl %esi
pushl %ebx
movl 8(%ebp),%eax
movl 12(%ebp),%ebx
movl 16(%ebp),%ecx
movl 20(%ebp),%edx
movl 24(%ebp),%esi
movl 28(%ebp),%edi
int $0x80
test %eax,%eax
jpe .LLexit
negl %eax
movl %eax,errno
movl $-1, %eax

.LLexit:
popl %ebx
popl %esi
popl %edi
movl %ebp,%esp
popl %ebp
ret
.type syscall,@function
.L_syscall_end:
.size syscall,.L_syscall_end -syscall

在PIC下,我們必須通過GOT(global offset table)來訪問任何全局變量
(除了保存在基寄存器ebx中的)。修改的代碼如下:

.file "syscall.S"
.text
.global syscall
.global errno
.align 16
syscall:
pushl %ebp
movl %esp,%ebp
pushl %edi
pushl %esi
pushl %ebx
call .LL4
.LL4:
popl %ebx
addl $_GLOBAL_OFFSET_TABLE_+[.- .LL4],%ebx
pushl %ebx
movl 8(%ebp),%eax
movl 12(%ebp),%ebx
movl 16(%ebp),%ecx
movl 20(%ebp),%edx
movl 24(%ebp),%esi
movl 28(%ebp),%edi
int $0x80
popl %ebx
movl %eax,%edx
test %edx,%edx
jge .LLexit
negl %edx
movl errno@GOT(%ebx),%eax
movl %edx,(%eax)
movl $-1,%eax
.LLexit:
popl %ebx
popl %esi
popl %edi
movl %ebp,%esp
popl %ebp
ret
.type syscall,@function
.L_syscall_end:
.size syscall,.L_syscall_end-syscall

假如要得到PIC的匯編代碼,但是又不知道如何寫,你可以寫一個C的,然后如下
編譯:

#gcc -O -fPIC -S foo.c

它將告訴gcc產(chǎn)生匯編代碼foo.s輸出,根據(jù)需要,可以修改它。


★7 結(jié)束語

根據(jù)以上討論的,我們可以得出這樣的結(jié)論:ELF是非常靈活的二進制格式。
它提供了非常有用的功能。這種規(guī)范沒有給程序和程序員太多限制。它使
創(chuàng)建共享庫容易,使動態(tài)裝載和共享庫的結(jié)合更加容易。在ELF下,在C++
中,全局的構(gòu)造函數(shù)和析構(gòu)函數(shù)在共享庫和靜態(tài)庫中用同樣方法處理。


[譯注:
到此,文章是翻譯好了,但里面的一些東西看起來可能
有點問題,比如說_libc_subinit section沒有他說的
那個功能,-dynamic-linker選項在默認的redhat 6.2系統(tǒng)
上不能用,_dlinfo動態(tài)連接接口庫函數(shù)好象在linux沒有實現(xiàn)
等等一系列問題,歡迎討論指正
mailto: alert7@21cn.com
??????????????? alert7@xfocus.org
]

參考:

1. Operating System API Reference:UNIX SVR4.2,UNIX Press,1992

2. SunOs 5.3 Linker and Libraries Manual,SunSoft ,1993.

3. Richard M.Stallman,Using and porting GNU CC for version 2.6,
?? Free Software Foundation,September 1994.

4. Steve Chamberlain and Roland Pesch,Using ld:The GNU linker,ld
?? version 2,Cygnus Support,January 1994.

總結(jié)

以上是生活随笔為你收集整理的从程序员角度看ELF的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

精品人人妻人人澡人人爽人人 | 色欲久久久天天天综合网精品 | 亚无码乱人伦一区二区 | 老头边吃奶边弄进去呻吟 | 999久久久国产精品消防器材 | 国产 浪潮av性色四虎 | 天下第一社区视频www日本 | 亚洲精品午夜国产va久久成人 | 午夜精品一区二区三区的区别 | 曰韩无码二三区中文字幕 | 又湿又紧又大又爽a视频国产 | 大胆欧美熟妇xx | 中文字幕乱码亚洲无线三区 | 国内精品九九久久久精品 | 精品欧洲av无码一区二区三区 | 久久99精品国产麻豆蜜芽 | 又粗又大又硬毛片免费看 | 日本一本二本三区免费 | 精品国产成人一区二区三区 | 亚洲乱码国产乱码精品精 | 狂野欧美性猛xxxx乱大交 | 台湾无码一区二区 | 国产性生交xxxxx无码 | 人人妻人人藻人人爽欧美一区 | 精品国产麻豆免费人成网站 | av无码不卡在线观看免费 | 欧美乱妇无乱码大黄a片 | 全球成人中文在线 | 天海翼激烈高潮到腰振不止 | 亚洲精品国产a久久久久久 | 国产性生交xxxxx无码 | 亚洲男人av天堂午夜在 | 少妇久久久久久人妻无码 | 麻豆精品国产精华精华液好用吗 | 丝袜人妻一区二区三区 | 精品国产av色一区二区深夜久久 | 国产香蕉尹人综合在线观看 | 国产另类ts人妖一区二区 | 亚洲日本va中文字幕 | 久久精品视频在线看15 | 人人超人人超碰超国产 | 人妻中文无码久热丝袜 | 嫩b人妻精品一区二区三区 | 亚洲男人av香蕉爽爽爽爽 | 中文字幕无码热在线视频 | 国产肉丝袜在线观看 | 一本久久伊人热热精品中文字幕 | 国产69精品久久久久app下载 | 国产又爽又黄又刺激的视频 | 久久久久亚洲精品中文字幕 | 国产香蕉尹人视频在线 | 亚洲爆乳大丰满无码专区 | 国产精品久久久 | 国产在线精品一区二区三区直播 | 无码免费一区二区三区 | 久久精品视频在线看15 | 色婷婷久久一区二区三区麻豆 | 亚洲日本va中文字幕 | 四虎国产精品一区二区 | 在线精品国产一区二区三区 | 最新版天堂资源中文官网 | 日日天日日夜日日摸 | 自拍偷自拍亚洲精品被多人伦好爽 | 狂野欧美性猛交免费视频 | 国产无av码在线观看 | 狠狠色噜噜狠狠狠7777奇米 | 亚洲 高清 成人 动漫 | 99久久人妻精品免费一区 | 女人被爽到呻吟gif动态图视看 | 牲欲强的熟妇农村老妇女视频 | 牲交欧美兽交欧美 | 最新版天堂资源中文官网 | 亚洲欧美综合区丁香五月小说 | 亚洲精品成a人在线观看 | 久久久久免费精品国产 | 国产高潮视频在线观看 | 国产凸凹视频一区二区 | 成人亚洲精品久久久久软件 | 熟妇人妻无码xxx视频 | 大肉大捧一进一出好爽视频 | 国产亚洲精品精品国产亚洲综合 | 熟女少妇人妻中文字幕 | 中文字幕人成乱码熟女app | 亚洲综合另类小说色区 | 国产乱人偷精品人妻a片 | 亚洲精品欧美二区三区中文字幕 | 欧美日韩色另类综合 | 丁香啪啪综合成人亚洲 | 76少妇精品导航 | 欧美猛少妇色xxxxx | 强辱丰满人妻hd中文字幕 | 欧美阿v高清资源不卡在线播放 | 无码播放一区二区三区 | 日日摸天天摸爽爽狠狠97 | 国产猛烈高潮尖叫视频免费 | 成人av无码一区二区三区 | 国产在线无码精品电影网 | 欧美丰满少妇xxxx性 | 日韩av激情在线观看 | 婷婷综合久久中文字幕蜜桃三电影 | 久久久久久久久蜜桃 | 欧美变态另类xxxx | 久久久av男人的天堂 | 久久综合给合久久狠狠狠97色 | 亚洲国产一区二区三区在线观看 | 免费观看的无遮挡av | 丰满少妇弄高潮了www | 国产一区二区三区影院 | 欧美丰满少妇xxxx性 | 中文字幕日韩精品一区二区三区 | 蜜桃av蜜臀av色欲av麻 999久久久国产精品消防器材 | 日韩av无码中文无码电影 | 又大又硬又爽免费视频 | 国内综合精品午夜久久资源 | 国内精品九九久久久精品 | 天天摸天天碰天天添 | 亚洲日本一区二区三区在线 | 亚洲一区av无码专区在线观看 | 久久天天躁夜夜躁狠狠 | www国产精品内射老师 | 欧美精品一区二区精品久久 | 1000部夫妻午夜免费 | 国产真人无遮挡作爱免费视频 | 波多野结衣乳巨码无在线观看 | 免费无码的av片在线观看 | 亚洲精品一区二区三区婷婷月 | 久久国内精品自在自线 | 99视频精品全部免费免费观看 | 欧美大屁股xxxxhd黑色 | √8天堂资源地址中文在线 | 午夜成人1000部免费视频 | 激情爆乳一区二区三区 | ass日本丰满熟妇pics | 樱花草在线社区www | 最近免费中文字幕中文高清百度 | 在线 国产 欧美 亚洲 天堂 | 亚洲国产欧美在线成人 | 久久久久人妻一区精品色欧美 | 久久久久国色av免费观看性色 | 国产成人无码av片在线观看不卡 | 高潮毛片无遮挡高清免费 | 国产又粗又硬又大爽黄老大爷视 | 日本熟妇乱子伦xxxx | 日本在线高清不卡免费播放 | 午夜福利电影 | 999久久久国产精品消防器材 | 精品一区二区三区波多野结衣 | 人妻少妇精品无码专区二区 | 精品水蜜桃久久久久久久 | 亚洲欧美综合区丁香五月小说 | 性欧美大战久久久久久久 | 窝窝午夜理论片影院 | 伊在人天堂亚洲香蕉精品区 | 狠狠色色综合网站 | 99久久精品无码一区二区毛片 | 精品乱子伦一区二区三区 | 久久综合九色综合欧美狠狠 | 国产午夜手机精彩视频 | 草草网站影院白丝内射 | 日本爽爽爽爽爽爽在线观看免 | 国产凸凹视频一区二区 | 欧美放荡的少妇 | 女高中生第一次破苞av | 少妇性俱乐部纵欲狂欢电影 | 丝袜 中出 制服 人妻 美腿 | 狠狠cao日日穞夜夜穞av | 未满小14洗澡无码视频网站 | 亚洲精品一区二区三区在线观看 | 久久精品成人欧美大片 | 国产亚洲精品久久久ai换 | 中文字幕日产无线码一区 | 欧美日本精品一区二区三区 | 久久精品女人的天堂av | 全黄性性激高免费视频 | 性欧美videos高清精品 | 国产精品资源一区二区 | 欧美激情一区二区三区成人 | 乱人伦中文视频在线观看 | 荫蒂被男人添的好舒服爽免费视频 | 乱中年女人伦av三区 | 欧美日韩一区二区三区自拍 | 国产人妻精品一区二区三区 | 日本成熟视频免费视频 | √天堂中文官网8在线 | 76少妇精品导航 | 国内丰满熟女出轨videos | 国产亚洲精品久久久久久大师 | 日韩欧美中文字幕公布 | 久久久精品国产sm最大网站 | 精品一区二区三区无码免费视频 | 久久国产精品二国产精品 | 亚洲精品国产品国语在线观看 | 久久久久亚洲精品男人的天堂 | 国产人妻人伦精品1国产丝袜 | 荫蒂被男人添的好舒服爽免费视频 | 日韩无码专区 | 欧美人与牲动交xxxx | 人妻夜夜爽天天爽三区 | 国产无av码在线观看 | 欧美激情综合亚洲一二区 | 亚洲精品鲁一鲁一区二区三区 | 日本一区二区三区免费播放 | 福利一区二区三区视频在线观看 | 日本一卡2卡3卡四卡精品网站 | 欧美日韩一区二区三区自拍 | 无码免费一区二区三区 | 在线亚洲高清揄拍自拍一品区 | 美女极度色诱视频国产 | 欧美性生交活xxxxxdddd | 日本又色又爽又黄的a片18禁 | 2020久久超碰国产精品最新 | 乱码午夜-极国产极内射 | 亚洲人成人无码网www国产 | 5858s亚洲色大成网站www | 午夜熟女插插xx免费视频 | 亚洲va欧美va天堂v国产综合 | 欧美野外疯狂做受xxxx高潮 | 免费人成在线视频无码 | 一本久久a久久精品亚洲 | 国产亚洲精品久久久ai换 | 妺妺窝人体色www在线小说 | 亚洲啪av永久无码精品放毛片 | 国产精品美女久久久久av爽李琼 | 蜜臀av在线观看 在线欧美精品一区二区三区 | 精品人人妻人人澡人人爽人人 | 国产亚洲精品久久久久久久久动漫 | 51国偷自产一区二区三区 | 国产真人无遮挡作爱免费视频 | 午夜男女很黄的视频 | 一本精品99久久精品77 | 欧美亚洲日韩国产人成在线播放 | 亚洲一区二区三区含羞草 | 亚洲va欧美va天堂v国产综合 | 丝袜足控一区二区三区 | 精品夜夜澡人妻无码av蜜桃 | 久久久无码中文字幕久... | 国产精品久久久久久无码 | 人妻天天爽夜夜爽一区二区 | 久久久久免费看成人影片 | 国产在线精品一区二区高清不卡 | 精品国产国产综合精品 | 疯狂三人交性欧美 | 午夜肉伦伦影院 | 天天躁日日躁狠狠躁免费麻豆 | 国产精品嫩草久久久久 | 国产午夜精品一区二区三区嫩草 | 色综合久久网 | 性欧美大战久久久久久久 | 2019nv天堂香蕉在线观看 | 欧美午夜特黄aaaaaa片 | 婷婷综合久久中文字幕蜜桃三电影 | 国内精品久久久久久中文字幕 | 帮老师解开蕾丝奶罩吸乳网站 | 国产深夜福利视频在线 | 国产人妻精品一区二区三区不卡 | 久久久久久a亚洲欧洲av冫 | 国产人成高清在线视频99最全资源 | 欧美日本日韩 | 97夜夜澡人人爽人人喊中国片 | 蜜臀aⅴ国产精品久久久国产老师 | 中文字幕无码人妻少妇免费 | 无码国产激情在线观看 | 国产午夜无码精品免费看 | 国产成人无码区免费内射一片色欲 | 久9re热视频这里只有精品 | 久久人人97超碰a片精品 | 亚洲色www成人永久网址 | 伊人久久大香线蕉av一区二区 | 曰韩无码二三区中文字幕 | 成 人影片 免费观看 | 成人欧美一区二区三区黑人 | 欧美高清在线精品一区 | 捆绑白丝粉色jk震动捧喷白浆 | 亚洲第一无码av无码专区 | 欧美真人作爱免费视频 | 色综合久久88色综合天天 | 日本又色又爽又黄的a片18禁 | 乱人伦人妻中文字幕无码 | 久久久中文字幕日本无吗 | 国产综合在线观看 | 国产av无码专区亚洲a∨毛片 | 国产一区二区三区影院 | 国产小呦泬泬99精品 | 亚洲a无码综合a国产av中文 | 中国大陆精品视频xxxx | 成在人线av无码免观看麻豆 | 99久久久无码国产精品免费 | 国产精品人妻一区二区三区四 | 色欲综合久久中文字幕网 | 国产9 9在线 | 中文 | 300部国产真实乱 | 性色av无码免费一区二区三区 | 国产99久久精品一区二区 | 欧美 日韩 亚洲 在线 | 夜夜影院未满十八勿进 | 国产情侣作爱视频免费观看 | 久久国产精品精品国产色婷婷 | 成熟妇人a片免费看网站 | 国产三级精品三级男人的天堂 | 国产97在线 | 亚洲 | 精品国产av色一区二区深夜久久 | 成人欧美一区二区三区黑人免费 | aⅴ亚洲 日韩 色 图网站 播放 | 色婷婷香蕉在线一区二区 | 国产特级毛片aaaaaaa高清 | 亚洲毛片av日韩av无码 | 国产激情综合五月久久 | 午夜性刺激在线视频免费 | 国产美女精品一区二区三区 | 18黄暴禁片在线观看 | 俺去俺来也www色官网 | av人摸人人人澡人人超碰下载 | 国产人成高清在线视频99最全资源 | 中国女人内谢69xxxxxa片 | 精品无码一区二区三区爱欲 | 麻豆成人精品国产免费 | 久久综合激激的五月天 | 亚洲 日韩 欧美 成人 在线观看 | 国产真实夫妇视频 | 东京无码熟妇人妻av在线网址 | 亚欧洲精品在线视频免费观看 | 在线播放无码字幕亚洲 | 国产午夜福利亚洲第一 | 一个人免费观看的www视频 | 久热国产vs视频在线观看 | 我要看www免费看插插视频 | 国产午夜精品一区二区三区嫩草 | 无码中文字幕色专区 | 久久综合狠狠综合久久综合88 | 国产婷婷色一区二区三区在线 | 女高中生第一次破苞av | 99国产欧美久久久精品 | 色欲人妻aaaaaaa无码 | 久久久av男人的天堂 | 日韩欧美群交p片內射中文 | 色妞www精品免费视频 | 中文字幕av日韩精品一区二区 | 国产成人无码av在线影院 | 中文字幕无码免费久久99 | 亚洲 激情 小说 另类 欧美 | 内射老妇bbwx0c0ck | 日韩视频 中文字幕 视频一区 | 国产亚洲tv在线观看 | 欧美人与动性行为视频 | 久久综合九色综合97网 | 亚洲一区二区三区国产精华液 | 精品人妻人人做人人爽夜夜爽 | 国产精品手机免费 | 亚洲精品一区二区三区婷婷月 | 日韩精品成人一区二区三区 | 精品偷拍一区二区三区在线看 | 无码人妻丰满熟妇区毛片18 | 欧美性黑人极品hd | 无套内射视频囯产 | 亚洲人成人无码网www国产 | 亚洲精品国产精品乱码视色 | 一本色道久久综合狠狠躁 | 国产精品人人爽人人做我的可爱 | 东京热无码av男人的天堂 | 人妻无码αv中文字幕久久琪琪布 | 亚洲精品一区三区三区在线观看 | 亚洲欧美中文字幕5发布 | 国产香蕉97碰碰久久人人 | 丰满人妻一区二区三区免费视频 | 99精品久久毛片a片 | √天堂中文官网8在线 | 国产精品国产三级国产专播 | av无码不卡在线观看免费 | 亚洲精品久久久久久久久久久 | 中文字幕 人妻熟女 | 精品乱码久久久久久久 | 欧美一区二区三区视频在线观看 | 亚洲午夜福利在线观看 | 国产精品99爱免费视频 | 日韩在线不卡免费视频一区 | 男女猛烈xx00免费视频试看 | 九月婷婷人人澡人人添人人爽 | 国产一区二区三区日韩精品 | 伊人久久大香线焦av综合影院 | 成人毛片一区二区 | 午夜精品久久久久久久 | 亚洲国产欧美国产综合一区 | 中文字幕亚洲情99在线 | 中文无码伦av中文字幕 | 荫蒂被男人添的好舒服爽免费视频 | 大地资源网第二页免费观看 | 少妇久久久久久人妻无码 | 色一情一乱一伦一区二区三欧美 | 亚洲人成网站在线播放942 | 乱人伦人妻中文字幕无码 | 久久 国产 尿 小便 嘘嘘 | 7777奇米四色成人眼影 | 精品国产一区av天美传媒 | 亚洲精品无码国产 | 国产精品国产自线拍免费软件 | 精品国产一区二区三区四区在线看 | 妺妺窝人体色www在线小说 | 天天躁日日躁狠狠躁免费麻豆 | 精品国产乱码久久久久乱码 | 婷婷五月综合缴情在线视频 | 欧美xxxxx精品 | 伊人久久大香线焦av综合影院 | 丰满护士巨好爽好大乳 | 无码一区二区三区在线观看 | 无码国产色欲xxxxx视频 | 亚洲日韩av一区二区三区四区 | 日韩av无码中文无码电影 | 日本精品人妻无码免费大全 | 国产免费无码一区二区视频 | a国产一区二区免费入口 | 久久亚洲国产成人精品性色 | 亚洲中文字幕乱码av波多ji | 免费中文字幕日韩欧美 | 久精品国产欧美亚洲色aⅴ大片 | 少妇厨房愉情理9仑片视频 | 无码国产激情在线观看 | 亚洲欧洲无卡二区视頻 | 国产精品久久久久久久影院 | 成人综合网亚洲伊人 | 色老头在线一区二区三区 | 日本www一道久久久免费榴莲 | 国产成人一区二区三区在线观看 | 亚洲熟妇色xxxxx欧美老妇y | 亚洲天堂2017无码中文 | 性欧美牲交在线视频 | 亚洲成a人片在线观看无码3d | 久久99久久99精品中文字幕 | 色欲人妻aaaaaaa无码 | 性色欲网站人妻丰满中文久久不卡 | 九月婷婷人人澡人人添人人爽 | 毛片内射-百度 | 亚洲精品久久久久久一区二区 | 亚洲乱码国产乱码精品精 | 欧美日韩人成综合在线播放 | 亚洲成熟女人毛毛耸耸多 | 国产精品办公室沙发 | 国产人妻精品午夜福利免费 | 亚洲精品综合五月久久小说 | 精品一区二区三区无码免费视频 | 亚洲中文字幕在线观看 | 狠狠躁日日躁夜夜躁2020 | 国产精品高潮呻吟av久久 | 人人超人人超碰超国产 | 亚洲 激情 小说 另类 欧美 | 国产精品手机免费 | 中文字幕无码日韩专区 | 精品国产一区av天美传媒 | 国产在线一区二区三区四区五区 | 亚洲精品国产a久久久久久 | 天堂а√在线中文在线 | 无码人妻出轨黑人中文字幕 | 亚洲男人av天堂午夜在 | 99久久亚洲精品无码毛片 | 99久久久无码国产aaa精品 | 日韩亚洲欧美中文高清在线 | 大乳丰满人妻中文字幕日本 | 激情内射亚州一区二区三区爱妻 | 性欧美大战久久久久久久 | 欧美午夜特黄aaaaaa片 | 国内揄拍国内精品人妻 | 色偷偷人人澡人人爽人人模 | 强辱丰满人妻hd中文字幕 | 国内少妇偷人精品视频免费 | 国产精品久久久av久久久 | 成人欧美一区二区三区黑人免费 | 狠狠色丁香久久婷婷综合五月 | 精品久久久无码中文字幕 | 国产亚洲精品久久久闺蜜 | 成人亚洲精品久久久久 | 午夜成人1000部免费视频 | 婷婷综合久久中文字幕蜜桃三电影 | 国精产品一品二品国精品69xx | 日日摸天天摸爽爽狠狠97 | 免费看男女做好爽好硬视频 | 无码午夜成人1000部免费视频 | 天堂а√在线地址中文在线 | 沈阳熟女露脸对白视频 | 精品国产aⅴ无码一区二区 | 奇米影视7777久久精品人人爽 | 美女黄网站人色视频免费国产 | 无遮无挡爽爽免费视频 | 国产深夜福利视频在线 | 白嫩日本少妇做爰 | 欧美兽交xxxx×视频 | 亚洲成a人片在线观看无码3d | 九月婷婷人人澡人人添人人爽 | 人妻少妇精品久久 | 激情国产av做激情国产爱 | 狠狠cao日日穞夜夜穞av | 国产综合久久久久鬼色 | 亚洲色大成网站www | 国产精品内射视频免费 | 国产成人一区二区三区别 | 亚洲熟妇色xxxxx欧美老妇 | 精品一区二区不卡无码av | 久久久久se色偷偷亚洲精品av | 日产国产精品亚洲系列 | 日韩少妇白浆无码系列 | 亚洲毛片av日韩av无码 | 狠狠色丁香久久婷婷综合五月 | 97精品人妻一区二区三区香蕉 | 国产成人精品久久亚洲高清不卡 | 日韩av激情在线观看 | 欧美精品在线观看 | 亚洲欧美色中文字幕在线 | 精品一区二区三区无码免费视频 | 国产精品二区一区二区aⅴ污介绍 | 激情综合激情五月俺也去 | 又粗又大又硬毛片免费看 | 一二三四社区在线中文视频 | 丁香啪啪综合成人亚洲 | 精品一区二区三区波多野结衣 | 国产精品va在线观看无码 | 狠狠色噜噜狠狠狠狠7777米奇 | 亚洲日韩中文字幕在线播放 | 欧美喷潮久久久xxxxx | 97色伦图片97综合影院 | 亚洲gv猛男gv无码男同 | 夜夜高潮次次欢爽av女 | 麻豆国产丝袜白领秘书在线观看 | 国产人妻精品一区二区三区不卡 | 亚洲中文字幕无码一久久区 | 国产av一区二区三区最新精品 | 日本丰满熟妇videos | 日韩视频 中文字幕 视频一区 | 亚洲精品国产第一综合99久久 | 久久精品丝袜高跟鞋 | 俄罗斯老熟妇色xxxx | 美女扒开屁股让男人桶 | 亚洲天堂2017无码中文 | 久久综合网欧美色妞网 | 最新版天堂资源中文官网 | 久久午夜夜伦鲁鲁片无码免费 | 荫蒂被男人添的好舒服爽免费视频 | 国产舌乚八伦偷品w中 | 兔费看少妇性l交大片免费 | 亚洲成av人片在线观看无码不卡 | 性欧美videos高清精品 | 国产精品高潮呻吟av久久 | 欧美放荡的少妇 | 俺去俺来也在线www色官网 | av无码电影一区二区三区 | 兔费看少妇性l交大片免费 | 大肉大捧一进一出视频出来呀 | 奇米影视7777久久精品人人爽 | 亚洲乱码中文字幕在线 | 亚洲啪av永久无码精品放毛片 | av无码久久久久不卡免费网站 | 玩弄少妇高潮ⅹxxxyw | 天堂无码人妻精品一区二区三区 | 九九在线中文字幕无码 | 两性色午夜视频免费播放 | 亚洲区小说区激情区图片区 | 天堂亚洲免费视频 | 亚洲日韩av一区二区三区四区 | 99riav国产精品视频 | aⅴ亚洲 日韩 色 图网站 播放 | 国产精品多人p群无码 | 在线亚洲高清揄拍自拍一品区 | 少女韩国电视剧在线观看完整 | 中文字幕亚洲情99在线 | 成人av无码一区二区三区 | 亚洲 激情 小说 另类 欧美 | 蜜桃视频韩日免费播放 | 中文无码伦av中文字幕 | 无码av免费一区二区三区试看 | 又粗又大又硬毛片免费看 | 乱人伦人妻中文字幕无码久久网 | 国产sm调教视频在线观看 | 最新国产乱人伦偷精品免费网站 | 97夜夜澡人人爽人人喊中国片 | 国产 浪潮av性色四虎 | 夫妻免费无码v看片 | 兔费看少妇性l交大片免费 | 99精品无人区乱码1区2区3区 | 国产精品久久久av久久久 | 亚洲国产精品成人久久蜜臀 | 日本爽爽爽爽爽爽在线观看免 | 国内丰满熟女出轨videos | 国产内射老熟女aaaa | 久久精品女人天堂av免费观看 | 免费无码一区二区三区蜜桃大 | 亚洲国产高清在线观看视频 | 日韩精品成人一区二区三区 | 桃花色综合影院 | 女人高潮内射99精品 | 亚洲精品久久久久久一区二区 | 女人被男人爽到呻吟的视频 | 学生妹亚洲一区二区 | 成人一区二区免费视频 | 亚洲人交乣女bbw | 日本xxxx色视频在线观看免费 | 中文字幕无码免费久久9一区9 | 欧洲欧美人成视频在线 | 亚洲中文字幕在线观看 | 又色又爽又黄的美女裸体网站 | 老头边吃奶边弄进去呻吟 | 99久久婷婷国产综合精品青草免费 | 亚洲一区二区三区在线观看网站 | 国产人妻人伦精品1国产丝袜 | 国内少妇偷人精品视频免费 | 精品偷自拍另类在线观看 | 欧美亚洲国产一区二区三区 | 国产精品无码mv在线观看 | 一本加勒比波多野结衣 | 欧美丰满少妇xxxx性 | 亚洲欧洲无卡二区视頻 | 蜜桃av抽搐高潮一区二区 | 纯爱无遮挡h肉动漫在线播放 | 久久久久免费精品国产 | 97久久超碰中文字幕 | 最新国产麻豆aⅴ精品无码 | 国产在线一区二区三区四区五区 | 国产精品久久久久7777 | 亚洲色大成网站www | 国产凸凹视频一区二区 | yw尤物av无码国产在线观看 | 久久综合给合久久狠狠狠97色 | 久久久久亚洲精品中文字幕 | 女人被爽到呻吟gif动态图视看 | 无遮挡啪啪摇乳动态图 | 精品熟女少妇av免费观看 | 永久免费观看国产裸体美女 | 国产在线一区二区三区四区五区 | 又大又硬又黄的免费视频 | 国产精品va在线观看无码 | 综合网日日天干夜夜久久 | 日本护士xxxxhd少妇 | 亚洲高清偷拍一区二区三区 | 日日夜夜撸啊撸 | 九月婷婷人人澡人人添人人爽 | 在线播放亚洲第一字幕 | 亚洲 高清 成人 动漫 | 丰满人妻翻云覆雨呻吟视频 | 久久久国产精品无码免费专区 | 国产精品va在线观看无码 | 1000部啪啪未满十八勿入下载 | 亚洲七七久久桃花影院 | 久久久久99精品成人片 | 亚洲自偷自偷在线制服 | 国产亚洲精品久久久ai换 | 国产乱人伦av在线无码 | 亚洲午夜福利在线观看 | 国内精品一区二区三区不卡 | 黑人巨大精品欧美一区二区 | 色一情一乱一伦一区二区三欧美 | 欧美激情内射喷水高潮 | 亚洲精品中文字幕乱码 | 黑人巨大精品欧美黑寡妇 | 亚洲 日韩 欧美 成人 在线观看 | 久久精品国产亚洲精品 | 夜夜高潮次次欢爽av女 | 日本一卡二卡不卡视频查询 | 激情爆乳一区二区三区 | 欧美变态另类xxxx | 在线播放无码字幕亚洲 | 午夜精品一区二区三区在线观看 | 正在播放老肥熟妇露脸 | 少妇无码一区二区二三区 | 亚洲国产一区二区三区在线观看 | 成人性做爰aaa片免费看 | а天堂中文在线官网 | 东京无码熟妇人妻av在线网址 | 女人色极品影院 | 欧美精品无码一区二区三区 | 性欧美牲交xxxxx视频 | 亚洲热妇无码av在线播放 | 日韩精品无码一本二本三本色 | 亚洲人成网站色7799 | 国产乱人伦av在线无码 | 国产小呦泬泬99精品 | 澳门永久av免费网站 | 日日鲁鲁鲁夜夜爽爽狠狠 | 无码成人精品区在线观看 | 欧美国产日韩久久mv | 久久午夜夜伦鲁鲁片无码免费 | 亚洲国产欧美日韩精品一区二区三区 | 午夜精品一区二区三区在线观看 | 激情国产av做激情国产爱 | 欧美日韩一区二区三区自拍 | 国产做国产爱免费视频 | 98国产精品综合一区二区三区 | 国产香蕉尹人综合在线观看 | 亚洲自偷自偷在线制服 | 18无码粉嫩小泬无套在线观看 | 亚洲中文字幕在线观看 | 亚洲国产一区二区三区在线观看 | 中文精品无码中文字幕无码专区 | 亚洲色在线无码国产精品不卡 | 97久久精品无码一区二区 | 国产精品亚洲lv粉色 | 国产后入清纯学生妹 | 中文字幕av无码一区二区三区电影 | 亚洲国产精品美女久久久久 | 日日摸夜夜摸狠狠摸婷婷 | 亚洲色偷偷男人的天堂 | 国产欧美熟妇另类久久久 | 欧美阿v高清资源不卡在线播放 | 欧美 亚洲 国产 另类 | 波多野结衣一区二区三区av免费 | 日韩精品乱码av一区二区 | 97夜夜澡人人双人人人喊 | 扒开双腿疯狂进出爽爽爽视频 | 亚洲综合色区中文字幕 | 玩弄人妻少妇500系列视频 | 一本精品99久久精品77 | 日本www一道久久久免费榴莲 | 日韩少妇内射免费播放 | 久久人人爽人人爽人人片av高清 | 少妇无码av无码专区在线观看 | 欧美阿v高清资源不卡在线播放 | 国产亚洲人成在线播放 | 国产亚洲精品久久久闺蜜 | 亚洲国产精品美女久久久久 | 伊人久久大香线蕉午夜 | 午夜熟女插插xx免费视频 | 国产绳艺sm调教室论坛 | 久久99国产综合精品 | 青青久在线视频免费观看 | 国产精品亚洲а∨无码播放麻豆 | 欧美野外疯狂做受xxxx高潮 | 欧美日韩综合一区二区三区 | 男人扒开女人内裤强吻桶进去 | 日本精品人妻无码免费大全 | 成人精品天堂一区二区三区 | 伊人久久大香线焦av综合影院 | 无套内谢老熟女 | 久久综合给合久久狠狠狠97色 | 欧美午夜特黄aaaaaa片 | 欧洲vodafone精品性 | 99er热精品视频 | 激情亚洲一区国产精品 | 国色天香社区在线视频 | 少妇愉情理伦片bd | 午夜精品一区二区三区在线观看 | 九九在线中文字幕无码 | 久久久久国色av免费观看性色 | 99久久婷婷国产综合精品青草免费 | 国产精品久久精品三级 | 国产在线精品一区二区高清不卡 | 麻豆蜜桃av蜜臀av色欲av | av在线亚洲欧洲日产一区二区 | 精品偷自拍另类在线观看 | 欧美国产亚洲日韩在线二区 | 狠狠色噜噜狠狠狠狠7777米奇 | 日韩精品无码一区二区中文字幕 | √天堂资源地址中文在线 | 国产精品亚洲专区无码不卡 | 狠狠综合久久久久综合网 | 在线看片无码永久免费视频 | 亚洲精品美女久久久久久久 | 无码人妻出轨黑人中文字幕 | 福利一区二区三区视频在线观看 | 国产精品福利视频导航 | 澳门永久av免费网站 | 精品亚洲韩国一区二区三区 | 色爱情人网站 | 西西人体www44rt大胆高清 | 久久亚洲a片com人成 | 亚洲精品国偷拍自产在线观看蜜桃 | 日日干夜夜干 | 色综合久久久久综合一本到桃花网 | 99久久久无码国产aaa精品 | 四虎影视成人永久免费观看视频 | 少妇无码吹潮 | 97se亚洲精品一区 | 日本熟妇人妻xxxxx人hd | 国产人妻精品一区二区三区 | 精品人妻人人做人人爽 | 久久天天躁狠狠躁夜夜免费观看 | 撕开奶罩揉吮奶头视频 | 日本成熟视频免费视频 | 无套内谢老熟女 | 少妇无码一区二区二三区 | 国产免费观看黄av片 | 一本加勒比波多野结衣 | 亚洲自偷自拍另类第1页 | 久在线观看福利视频 | 成 人 网 站国产免费观看 | 无码午夜成人1000部免费视频 | 亚洲综合另类小说色区 | 精品人人妻人人澡人人爽人人 | 久久综合久久自在自线精品自 | 最新国产麻豆aⅴ精品无码 | 午夜不卡av免费 一本久久a久久精品vr综合 | 好屌草这里只有精品 | 娇妻被黑人粗大高潮白浆 | 成人动漫在线观看 | 人人妻人人澡人人爽欧美精品 | 亚洲精品一区二区三区在线观看 | 麻豆精品国产精华精华液好用吗 | 国产成人亚洲综合无码 | 亚洲欧美色中文字幕在线 | 天天躁日日躁狠狠躁免费麻豆 | 中文字幕人成乱码熟女app | 亚洲性无码av中文字幕 | 亚洲精品鲁一鲁一区二区三区 | 欧美人与禽zoz0性伦交 | 俺去俺来也在线www色官网 | 欧美乱妇无乱码大黄a片 | 男女作爱免费网站 | 色狠狠av一区二区三区 | 久久99精品久久久久久 | 日韩人妻系列无码专区 | 1000部夫妻午夜免费 | 九九综合va免费看 | 天堂一区人妻无码 | 久久综合九色综合97网 | 亚洲乱码中文字幕在线 | 国产精品久久久久久久9999 | 久久亚洲精品中文字幕无男同 | 欧美35页视频在线观看 | 男人扒开女人内裤强吻桶进去 | 国产香蕉尹人综合在线观看 | 在线 国产 欧美 亚洲 天堂 | 中文字幕av日韩精品一区二区 | 无码人妻丰满熟妇区毛片18 | 免费人成在线观看网站 | 成人综合网亚洲伊人 | 精品人妻人人做人人爽 | 精品成人av一区二区三区 | 亚洲色在线无码国产精品不卡 | 成人片黄网站色大片免费观看 | 国产成人无码av一区二区 | 午夜精品一区二区三区在线观看 | 日日躁夜夜躁狠狠躁 | 波多野结衣av一区二区全免费观看 | 亚洲成av人在线观看网址 | 日韩欧美中文字幕在线三区 | 成人无码视频在线观看网站 | 少妇无码av无码专区在线观看 | 高潮喷水的毛片 | 少妇无套内谢久久久久 | 日本爽爽爽爽爽爽在线观看免 | 亚洲 高清 成人 动漫 | 亚洲精品成a人在线观看 | 无码人妻出轨黑人中文字幕 | 在线播放无码字幕亚洲 | 久久久中文久久久无码 | 亚洲一区二区三区无码久久 | 乱码午夜-极国产极内射 | 97久久精品无码一区二区 | 婷婷丁香六月激情综合啪 | 成 人 免费观看网站 | 波多野结衣av一区二区全免费观看 | 人人妻人人澡人人爽人人精品 | 亚洲成av人综合在线观看 | 国产亚洲tv在线观看 | 天天拍夜夜添久久精品 | 亚洲小说图区综合在线 | 精品亚洲韩国一区二区三区 | 中文无码精品a∨在线观看不卡 | 国产办公室秘书无码精品99 | 美女极度色诱视频国产 | 亚洲呦女专区 | 国产欧美精品一区二区三区 | 99久久人妻精品免费一区 | 色综合久久久久综合一本到桃花网 | 天堂а√在线中文在线 | 天堂一区人妻无码 | 欧美丰满熟妇xxxx性ppx人交 | 黑人巨大精品欧美一区二区 | 黑森林福利视频导航 | 亚洲の无码国产の无码步美 | 亚洲中文字幕av在天堂 | 亚洲小说图区综合在线 | aⅴ在线视频男人的天堂 | 国产亲子乱弄免费视频 | 国产精品福利视频导航 | 午夜熟女插插xx免费视频 | 成人性做爰aaa片免费看不忠 | 免费中文字幕日韩欧美 | 一本久道高清无码视频 | 日本丰满熟妇videos | 日本免费一区二区三区最新 | 国产精品igao视频网 | 熟妇女人妻丰满少妇中文字幕 | 四虎国产精品一区二区 | 久久精品人人做人人综合 | 国产真人无遮挡作爱免费视频 | 爽爽影院免费观看 | 亚洲啪av永久无码精品放毛片 | 精品久久久无码中文字幕 | 国产情侣作爱视频免费观看 | 久久综合网欧美色妞网 | 好屌草这里只有精品 | 99麻豆久久久国产精品免费 | 亚洲一区av无码专区在线观看 | 欧美国产日韩亚洲中文 | 麻花豆传媒剧国产免费mv在线 | 精品国产一区二区三区四区 | 久久99热只有频精品8 | 国产精品亚洲五月天高清 | 国产香蕉尹人视频在线 | 国产肉丝袜在线观看 | 国产精品久久久一区二区三区 | 久久国产劲爆∧v内射 | 99久久精品日本一区二区免费 | 老子影院午夜伦不卡 | 国产麻豆精品一区二区三区v视界 | 99精品国产综合久久久久五月天 | 精品亚洲成av人在线观看 | 天海翼激烈高潮到腰振不止 | 天干天干啦夜天干天2017 | 久久综合色之久久综合 | 久久精品国产亚洲精品 | 东北女人啪啪对白 | 午夜肉伦伦影院 | 国产精品久久久久9999小说 | 国产熟女一区二区三区四区五区 | 永久免费精品精品永久-夜色 | 久久久久久九九精品久 | 老司机亚洲精品影院 | 中文字幕无码人妻少妇免费 | 老熟女重囗味hdxx69 | 天天综合网天天综合色 | 高潮毛片无遮挡高清免费视频 | 亚洲色大成网站www国产 | 欧洲欧美人成视频在线 | 十八禁真人啪啪免费网站 | 国产人妻精品一区二区三区不卡 | 在线 国产 欧美 亚洲 天堂 | 少妇的肉体aa片免费 | 成人性做爰aaa片免费看不忠 | 久久天天躁夜夜躁狠狠 | 丰满少妇熟乱xxxxx视频 | 男女作爱免费网站 | 妺妺窝人体色www在线小说 | 国产乡下妇女做爰 | 国内精品久久久久久中文字幕 | 色窝窝无码一区二区三区色欲 | 学生妹亚洲一区二区 | 国产成人午夜福利在线播放 | 露脸叫床粗话东北少妇 | 亚洲无人区一区二区三区 | 性欧美熟妇videofreesex | 野外少妇愉情中文字幕 | 国产亚洲精品久久久ai换 | 色一情一乱一伦一视频免费看 | 精品国产一区二区三区av 性色 | 国产精品无码一区二区三区不卡 | 国产九九九九九九九a片 | 高潮毛片无遮挡高清免费 | 久久综合色之久久综合 | 丰满少妇人妻久久久久久 | 最近的中文字幕在线看视频 | 日韩精品一区二区av在线 | 国产性猛交╳xxx乱大交 国产精品久久久久久无码 欧洲欧美人成视频在线 | 高潮喷水的毛片 | 中文字幕 人妻熟女 | 麻豆人妻少妇精品无码专区 | 欧美三级a做爰在线观看 | 欧美日本精品一区二区三区 | 午夜男女很黄的视频 | 中文字幕无线码 | 国产无套粉嫩白浆在线 | 精品国产精品久久一区免费式 | 蜜桃视频插满18在线观看 | 欧美肥老太牲交大战 | 乱人伦人妻中文字幕无码 | 久久精品国产99精品亚洲 | 精品日本一区二区三区在线观看 | a片在线免费观看 | 99精品国产综合久久久久五月天 | 久久熟妇人妻午夜寂寞影院 | 樱花草在线播放免费中文 | 亚洲一区二区三区在线观看网站 | 精品久久久中文字幕人妻 | 亚洲中文字幕va福利 | 男女超爽视频免费播放 | 国产精品久久久av久久久 | 97久久超碰中文字幕 | 欧美野外疯狂做受xxxx高潮 | 成人试看120秒体验区 | 婷婷五月综合缴情在线视频 | 久久久婷婷五月亚洲97号色 | 欧美丰满少妇xxxx性 | 久久午夜无码鲁丝片午夜精品 | 成 人 网 站国产免费观看 | 无码人妻丰满熟妇区五十路百度 | 搡女人真爽免费视频大全 | 性欧美疯狂xxxxbbbb | 桃花色综合影院 | √天堂资源地址中文在线 | 国产人妻久久精品二区三区老狼 | 天天爽夜夜爽夜夜爽 | 久久久久久久人妻无码中文字幕爆 | 国产精品鲁鲁鲁 | 国产精品无码一区二区三区不卡 | 欧美三级a做爰在线观看 | 国产一区二区不卡老阿姨 | 亚洲一区二区三区播放 | v一区无码内射国产 | 99久久久国产精品无码免费 | 久久97精品久久久久久久不卡 | 欧美自拍另类欧美综合图片区 | 99久久精品国产一区二区蜜芽 | 性色欲情网站iwww九文堂 | 国产亚洲精品久久久久久久 | 免费无码的av片在线观看 | 国产凸凹视频一区二区 | 色综合久久88色综合天天 | 久久97精品久久久久久久不卡 | 丝袜足控一区二区三区 | 国产免费无码一区二区视频 | 亚洲日韩乱码中文无码蜜桃臀网站 | 一本久久伊人热热精品中文字幕 | 国产精品久久久久7777 | 久久久久国色av免费观看性色 | 永久黄网站色视频免费直播 | 一二三四在线观看免费视频 | 亚洲精品久久久久久久久久久 | 思思久久99热只有频精品66 | 中文字幕日韩精品一区二区三区 | 玩弄人妻少妇500系列视频 | 亚洲综合伊人久久大杳蕉 | 亚洲成av人综合在线观看 | а天堂中文在线官网 | 久久亚洲日韩精品一区二区三区 | 亚洲中文字幕在线无码一区二区 | 日日干夜夜干 | 亚洲精品中文字幕乱码 | 国产成人午夜福利在线播放 | 水蜜桃亚洲一二三四在线 | 久久综合激激的五月天 | 国产色精品久久人妻 | 久久综合狠狠综合久久综合88 | 亚洲另类伦春色综合小说 | 日本乱人伦片中文三区 | 久久亚洲精品成人无码 | 黑人粗大猛烈进出高潮视频 | 免费观看又污又黄的网站 | 性生交大片免费看l | 欧美人与物videos另类 | 色欲久久久天天天综合网精品 | 丰满妇女强制高潮18xxxx | 中文字幕日韩精品一区二区三区 | 人妻少妇被猛烈进入中文字幕 | 亚洲高清偷拍一区二区三区 | 国产精品va在线观看无码 | 国产综合久久久久鬼色 | 亚洲精品久久久久avwww潮水 | 熟妇人妻中文av无码 | 日韩视频 中文字幕 视频一区 | 亚洲自偷精品视频自拍 | 精品一区二区三区波多野结衣 | 免费视频欧美无人区码 | 18精品久久久无码午夜福利 | 国产激情无码一区二区app | 亚洲国产成人a精品不卡在线 | 亚洲自偷精品视频自拍 | 国产精品高潮呻吟av久久4虎 | 亚洲精品一区二区三区在线 | 国产又爽又黄又刺激的视频 | 51国偷自产一区二区三区 | 人妻插b视频一区二区三区 | 日韩成人一区二区三区在线观看 | 国产精品国产三级国产专播 | 精品无人区无码乱码毛片国产 | √天堂中文官网8在线 | 欧美色就是色 | 18黄暴禁片在线观看 | 东京热无码av男人的天堂 | 无码毛片视频一区二区本码 | 国内精品久久毛片一区二区 | 日日噜噜噜噜夜夜爽亚洲精品 | 国产舌乚八伦偷品w中 | 国产超碰人人爽人人做人人添 | 无码播放一区二区三区 | 婷婷六月久久综合丁香 | 噜噜噜亚洲色成人网站 | 久久久久成人片免费观看蜜芽 | 波多野结衣aⅴ在线 | 久久精品国产99精品亚洲 | 岛国片人妻三上悠亚 | 中文字幕 亚洲精品 第1页 | 欧美肥老太牲交大战 | 久久亚洲中文字幕无码 | 亚洲精品久久久久久一区二区 | 国产精品人人爽人人做我的可爱 | 精品国产福利一区二区 | 国内少妇偷人精品视频 | 性色av无码免费一区二区三区 | 大乳丰满人妻中文字幕日本 | 成人无码精品一区二区三区 | 欧美第一黄网免费网站 | 亚洲国产一区二区三区在线观看 | 中文字幕乱妇无码av在线 | 国内老熟妇对白xxxxhd | 麻豆蜜桃av蜜臀av色欲av | 性欧美疯狂xxxxbbbb | 蜜桃视频韩日免费播放 | 免费看男女做好爽好硬视频 | 欧美日韩一区二区综合 | 一本色道久久综合亚洲精品不卡 | 婷婷六月久久综合丁香 | 亚洲欧洲日本综合aⅴ在线 | 欧美性黑人极品hd | 亚洲日韩av一区二区三区中文 | 一本色道久久综合亚洲精品不卡 | 麻花豆传媒剧国产免费mv在线 | 日本免费一区二区三区最新 | 麻豆国产丝袜白领秘书在线观看 | 青青草原综合久久大伊人精品 | 精品国偷自产在线视频 | 97久久超碰中文字幕 | 亚洲欧美国产精品专区久久 | 天堂а√在线中文在线 | 国产美女极度色诱视频www | 偷窥日本少妇撒尿chinese | 牲欲强的熟妇农村老妇女 | 国产人妻大战黑人第1集 | 在线观看国产一区二区三区 | 黑人大群体交免费视频 | 日韩人妻无码中文字幕视频 | 午夜免费福利小电影 | 久久久久99精品成人片 | 精品国产一区二区三区四区在线看 | 成人亚洲精品久久久久 | 久9re热视频这里只有精品 | 熟妇女人妻丰满少妇中文字幕 | 国产成人无码a区在线观看视频app | 亚洲 a v无 码免 费 成 人 a v | 成熟人妻av无码专区 | 国内少妇偷人精品视频 | 特黄特色大片免费播放器图片 | 国产午夜亚洲精品不卡下载 | 欧美35页视频在线观看 | 麻豆精产国品 | 1000部啪啪未满十八勿入下载 | 97精品人妻一区二区三区香蕉 | 麻花豆传媒剧国产免费mv在线 | 麻豆成人精品国产免费 | 在线亚洲高清揄拍自拍一品区 | 精品国产福利一区二区 | 女人和拘做爰正片视频 | av在线亚洲欧洲日产一区二区 | 中文字幕亚洲情99在线 | 亚洲午夜久久久影院 | 国产人妻人伦精品 | 精品国产aⅴ无码一区二区 | 国产午夜亚洲精品不卡下载 | 97久久国产亚洲精品超碰热 | 国产偷自视频区视频 | 国产精品亚洲专区无码不卡 | 久在线观看福利视频 | 7777奇米四色成人眼影 | 丰满少妇弄高潮了www | 国产亚洲日韩欧美另类第八页 | 欧洲精品码一区二区三区免费看 | 日韩欧美群交p片內射中文 | 成年美女黄网站色大免费视频 | 婷婷丁香五月天综合东京热 | 亚洲精品中文字幕 | 国产97人人超碰caoprom | 波多野结衣av一区二区全免费观看 | 99久久精品日本一区二区免费 | 人妻人人添人妻人人爱 | 秋霞成人午夜鲁丝一区二区三区 | 国产九九九九九九九a片 | 扒开双腿吃奶呻吟做受视频 | 国产免费无码一区二区视频 | 国产97色在线 | 免 | 中文字幕中文有码在线 | 欧美国产日产一区二区 | 国产精品亚洲五月天高清 | 日韩精品无码一区二区中文字幕 | 亚洲无人区午夜福利码高清完整版 | 久久精品国产99精品亚洲 | 久久99精品久久久久久 | 日日天日日夜日日摸 | 国产精品人妻一区二区三区四 | 亚洲精品国产第一综合99久久 | 国产女主播喷水视频在线观看 | 一本色道久久综合亚洲精品不卡 | 免费国产成人高清在线观看网站 | 露脸叫床粗话东北少妇 | 狠狠色欧美亚洲狠狠色www | 成人aaa片一区国产精品 | 久久久久久国产精品无码下载 | 国产乱人伦偷精品视频 | 偷窥村妇洗澡毛毛多 | 日日摸天天摸爽爽狠狠97 | 国产办公室秘书无码精品99 | ass日本丰满熟妇pics | 色婷婷av一区二区三区之红樱桃 | 日日天日日夜日日摸 | 欧美成人高清在线播放 | 久久无码人妻影院 | 国产精品美女久久久网av | 黑人巨大精品欧美黑寡妇 | 欧美国产日韩亚洲中文 | 人人爽人人澡人人人妻 | 亚洲gv猛男gv无码男同 | 三上悠亚人妻中文字幕在线 | 成年女人永久免费看片 | 亚洲人成影院在线无码按摩店 | 7777奇米四色成人眼影 | 曰本女人与公拘交酡免费视频 | 伊人久久大香线蕉亚洲 | 乱人伦人妻中文字幕无码久久网 | 久久久久免费看成人影片 | 亚洲综合无码久久精品综合 | 亚洲国产精品成人久久蜜臀 | 久久99热只有频精品8 | 久久精品丝袜高跟鞋 | 内射老妇bbwx0c0ck | 99国产精品白浆在线观看免费 | 精品久久久中文字幕人妻 | 伊人久久婷婷五月综合97色 | 精品无码成人片一区二区98 | 亚洲啪av永久无码精品放毛片 | 无码人妻出轨黑人中文字幕 | 国产午夜手机精彩视频 | 强辱丰满人妻hd中文字幕 | 樱花草在线播放免费中文 | 国产猛烈高潮尖叫视频免费 | 中文字幕av伊人av无码av | 亚洲中文字幕无码中文字在线 | 无码人妻丰满熟妇区毛片18 | 精品成人av一区二区三区 | 亚洲爆乳大丰满无码专区 | 国产绳艺sm调教室论坛 | 国产疯狂伦交大片 | 夜夜影院未满十八勿进 | av无码不卡在线观看免费 | 国产婷婷色一区二区三区在线 | 国产激情无码一区二区 | 日日噜噜噜噜夜夜爽亚洲精品 | 亚洲精品国产精品乱码不卡 | 玩弄少妇高潮ⅹxxxyw | 国产舌乚八伦偷品w中 | a片免费视频在线观看 | 日日天干夜夜狠狠爱 | 亚洲熟悉妇女xxx妇女av | 又粗又大又硬又长又爽 | 无码人妻黑人中文字幕 | 无码乱肉视频免费大全合集 | 久久国语露脸国产精品电影 | 全黄性性激高免费视频 | 亚洲午夜无码久久 | 正在播放老肥熟妇露脸 | 国产精品久久久久久久9999 | 2019nv天堂香蕉在线观看 | 国产精品无码永久免费888 | 国产热a欧美热a在线视频 | 久久天天躁夜夜躁狠狠 | 一个人免费观看的www视频 | 天天综合网天天综合色 | 久久午夜无码鲁丝片 | 无遮挡国产高潮视频免费观看 | 欧美午夜特黄aaaaaa片 | 欧美人妻一区二区三区 | 国产精品igao视频网 | 国产av一区二区三区最新精品 | 99久久亚洲精品无码毛片 | 亚洲人成人无码网www国产 | 久久99精品久久久久久 | 在线观看欧美一区二区三区 | 国产另类ts人妖一区二区 | 鲁鲁鲁爽爽爽在线视频观看 | 国产成人综合色在线观看网站 | 久久久久亚洲精品中文字幕 | 亚洲爆乳大丰满无码专区 | 99久久精品国产一区二区蜜芽 | 人人妻人人澡人人爽精品欧美 | 东京一本一道一二三区 | 国产色视频一区二区三区 | 奇米影视7777久久精品 | 又黄又爽又色的视频 | 成人性做爰aaa片免费看 | 国产成人无码午夜视频在线观看 | 给我免费的视频在线观看 | 久久zyz资源站无码中文动漫 | 丰满岳乱妇在线观看中字无码 | 在线精品国产一区二区三区 | 亚洲精品成a人在线观看 | 夜夜影院未满十八勿进 | 未满小14洗澡无码视频网站 | 中文字幕日韩精品一区二区三区 | 久久国产精品偷任你爽任你 | 久久久婷婷五月亚洲97号色 | 国产办公室秘书无码精品99 | 国内精品人妻无码久久久影院 | 国模大胆一区二区三区 | 久久久亚洲欧洲日产国码αv | 丰满少妇女裸体bbw | 日韩人妻少妇一区二区三区 | 俺去俺来也www色官网 | 久久久精品456亚洲影院 | 无码国产乱人伦偷精品视频 | 亚洲综合伊人久久大杳蕉 | 自拍偷自拍亚洲精品被多人伦好爽 | 精品国偷自产在线 | 国产亚洲精品久久久闺蜜 | 亚洲国精产品一二二线 | 人人妻人人澡人人爽欧美一区 | 国产精品久久久久9999小说 | 久久国产精品偷任你爽任你 | 亚洲熟妇色xxxxx亚洲 | 亚洲人成无码网www | 日韩精品无码免费一区二区三区 | 成人精品视频一区二区三区尤物 | 欧美日韩一区二区免费视频 | 中文字幕无码av波多野吉衣 | 免费视频欧美无人区码 | 欧洲美熟女乱又伦 | 国产亚洲精品久久久久久久 | 亚洲中文字幕无码中文字在线 | 性生交片免费无码看人 | 午夜男女很黄的视频 | 日韩精品a片一区二区三区妖精 | 亚洲成av人综合在线观看 | 丰满人妻被黑人猛烈进入 | 四虎国产精品一区二区 | 国产乱人伦app精品久久 国产在线无码精品电影网 国产国产精品人在线视 | aⅴ在线视频男人的天堂 | 中文无码成人免费视频在线观看 | 国产一区二区三区日韩精品 | 国语精品一区二区三区 | 国模大胆一区二区三区 | 日韩人妻系列无码专区 | 一本久久a久久精品vr综合 | 亚洲а∨天堂久久精品2021 | 精品久久久无码人妻字幂 | 99精品无人区乱码1区2区3区 | 亚洲一区二区三区在线观看网站 | 波多野结衣乳巨码无在线观看 | 亚洲精品国产a久久久久久 | 99久久精品无码一区二区毛片 | 乱人伦人妻中文字幕无码久久网 | 久久 国产 尿 小便 嘘嘘 | 奇米综合四色77777久久 东京无码熟妇人妻av在线网址 | 亚洲色www成人永久网址 | 纯爱无遮挡h肉动漫在线播放 | 亚洲国产精品无码久久久久高潮 | 日本一卡二卡不卡视频查询 | www国产亚洲精品久久久日本 | 久久天天躁夜夜躁狠狠 | 亚洲成a人片在线观看无码 | 日本免费一区二区三区最新 | 国产精品久久久久影院嫩草 | 少妇无码av无码专区在线观看 | 精品国产麻豆免费人成网站 | 超碰97人人做人人爱少妇 | 国产成人无码午夜视频在线观看 | 亚洲另类伦春色综合小说 | 激情国产av做激情国产爱 | 青草视频在线播放 | 狠狠噜狠狠狠狠丁香五月 | 东京热一精品无码av | 亚洲色欲久久久综合网东京热 | 天下第一社区视频www日本 | 丰满人妻被黑人猛烈进入 | 国产熟女一区二区三区四区五区 | 在线播放亚洲第一字幕 | 中文字幕av无码一区二区三区电影 | 国产精品无码久久av | 美女黄网站人色视频免费国产 | 一区二区三区高清视频一 | 国产网红无码精品视频 | 国内精品久久久久久中文字幕 | 色窝窝无码一区二区三区色欲 | 国产色xx群视频射精 | 十八禁真人啪啪免费网站 | 欧美成人高清在线播放 | 乱中年女人伦av三区 | 亚洲精品一区二区三区在线 | 国产亚洲精品久久久久久 | 久久久久av无码免费网 | 久久精品国产日本波多野结衣 | 亚洲国产成人a精品不卡在线 | 欧美日韩一区二区综合 | 伊人久久大香线蕉av一区二区 | 狂野欧美激情性xxxx | 亚洲成av人片天堂网无码】 | 东京热无码av男人的天堂 | 国产亚洲tv在线观看 | 亚洲日韩乱码中文无码蜜桃臀网站 | 亚洲精品中文字幕久久久久 | 少妇性荡欲午夜性开放视频剧场 | 无码精品人妻一区二区三区av | 国产精品成人av在线观看 | 久久综合色之久久综合 | 水蜜桃亚洲一二三四在线 | 欧美人与牲动交xxxx | 色综合久久久无码中文字幕 | 精品无码av一区二区三区 | 中文字幕乱码亚洲无线三区 | 在线成人www免费观看视频 | 大胆欧美熟妇xx | 亚洲国产精品无码久久久久高潮 | 少妇一晚三次一区二区三区 | 成人影院yy111111在线观看 | 荫蒂被男人添的好舒服爽免费视频 | 在线观看国产午夜福利片 | 国产亚av手机在线观看 | а天堂中文在线官网 | 亚洲男人av香蕉爽爽爽爽 | 成人亚洲精品久久久久软件 | 无遮挡国产高潮视频免费观看 | 伊人久久大香线蕉亚洲 | 亚洲熟妇色xxxxx欧美老妇 | 国产成人综合色在线观看网站 | 亚洲综合久久一区二区 | 久久久婷婷五月亚洲97号色 | 国产乱人伦app精品久久 国产在线无码精品电影网 国产国产精品人在线视 | 精品欧洲av无码一区二区三区 | 亚洲一区二区三区在线观看网站 | 欧美性猛交内射兽交老熟妇 | 99精品国产综合久久久久五月天 | 鲁大师影院在线观看 | 中文精品久久久久人妻不卡 | 一本精品99久久精品77 | 国产精品沙发午睡系列 | 免费观看的无遮挡av | 国产成人无码a区在线观看视频app | 中国女人内谢69xxxxxa片 | 正在播放东北夫妻内射 | 国内精品久久久久久中文字幕 | 特级做a爰片毛片免费69 | 狠狠色丁香久久婷婷综合五月 | 最新版天堂资源中文官网 | 亚洲精品国产第一综合99久久 | av无码久久久久不卡免费网站 | 一区二区三区乱码在线 | 欧洲 | 久久人人爽人人爽人人片ⅴ | 天堂亚洲免费视频 | 亚洲国产成人a精品不卡在线 | 国产精品久久精品三级 | 久久人人爽人人爽人人片av高清 | 又粗又大又硬又长又爽 | 久久久亚洲欧洲日产国码αv | 久在线观看福利视频 | 樱花草在线社区www | 人人超人人超碰超国产 | 熟女体下毛毛黑森林 | 亚洲中文字幕在线无码一区二区 | 好屌草这里只有精品 | 久久精品国产亚洲精品 | 67194成是人免费无码 | 女人高潮内射99精品 | 久久伊人色av天堂九九小黄鸭 | 老司机亚洲精品影院 | 国产一区二区不卡老阿姨 | 在线观看国产一区二区三区 | 一本久道久久综合狠狠爱 | 亚洲精品午夜国产va久久成人 | 帮老师解开蕾丝奶罩吸乳网站 | 久久久www成人免费毛片 | 中文字幕 人妻熟女 | 国产精品久久久久7777 | 人人妻人人澡人人爽精品欧美 | 国产亚洲欧美在线专区 | 一本色道久久综合亚洲精品不卡 | 精品一区二区三区无码免费视频 | 玩弄中年熟妇正在播放 | 麻豆精品国产精华精华液好用吗 | 一本大道久久东京热无码av | 未满成年国产在线观看 | 亚洲人亚洲人成电影网站色 | 人妻无码αv中文字幕久久琪琪布 | 亚洲 a v无 码免 费 成 人 a v | 精品无码国产一区二区三区av | 国产精品va在线播放 | 少妇无码av无码专区在线观看 | 成人性做爰aaa片免费看 | 亚洲 另类 在线 欧美 制服 | 又大又黄又粗又爽的免费视频 | 日产精品高潮呻吟av久久 | 国产性生大片免费观看性 | 久9re热视频这里只有精品 | 日韩人妻少妇一区二区三区 | 男女猛烈xx00免费视频试看 | 东北女人啪啪对白 | 大乳丰满人妻中文字幕日本 | 日韩少妇白浆无码系列 | 国产三级精品三级男人的天堂 | 欧美成人高清在线播放 | 97人妻精品一区二区三区 | 国产精品香蕉在线观看 | 精品一区二区三区无码免费视频 | 无码人妻久久一区二区三区不卡 | 狠狠cao日日穞夜夜穞av | 欧美日本精品一区二区三区 | 国产精品美女久久久网av | 鲁大师影院在线观看 | 亚洲成av人片在线观看无码不卡 | 99久久久国产精品无码免费 | 亚洲va中文字幕无码久久不卡 | 精品无码一区二区三区爱欲 | 奇米综合四色77777久久 东京无码熟妇人妻av在线网址 | 自拍偷自拍亚洲精品10p | 99久久久无码国产aaa精品 | 老子影院午夜精品无码 | 暴力强奷在线播放无码 | 久久精品国产99久久6动漫 | 国产精品多人p群无码 | 国产人妻人伦精品1国产丝袜 | a片在线免费观看 | 久久97精品久久久久久久不卡 | 欧美精品国产综合久久 | 六十路熟妇乱子伦 | 377p欧洲日本亚洲大胆 | 国产色视频一区二区三区 | 无码av最新清无码专区吞精 | 中文毛片无遮挡高清免费 | 玩弄少妇高潮ⅹxxxyw | 亚洲人成网站在线播放942 | 青春草在线视频免费观看 | 国产亲子乱弄免费视频 | 国产成人一区二区三区在线观看 | 一本精品99久久精品77 | 成人片黄网站色大片免费观看 | 免费视频欧美无人区码 | 亚洲成在人网站无码天堂 | 欧美成人高清在线播放 | 55夜色66夜色国产精品视频 | 在线观看国产午夜福利片 | 亚洲国产精品久久久久久 | 任你躁国产自任一区二区三区 | 久久99精品国产麻豆蜜芽 | 99久久人妻精品免费一区 | 人人妻人人澡人人爽人人精品 | 午夜精品久久久久久久久 | 亚洲熟女一区二区三区 | 国产午夜亚洲精品不卡下载 | 中文字幕无码av激情不卡 | 高清国产亚洲精品自在久久 | 久久久久久久人妻无码中文字幕爆 | 任你躁国产自任一区二区三区 | 亚洲国产欧美日韩精品一区二区三区 | 色妞www精品免费视频 | 日韩精品久久久肉伦网站 | 成人影院yy111111在线观看 | 国产手机在线αⅴ片无码观看 | 精品欧美一区二区三区久久久 | 欧美日韩在线亚洲综合国产人 | 少妇人妻av毛片在线看 | 无码人妻精品一区二区三区下载 | 在线观看国产午夜福利片 | 免费人成在线视频无码 | 国产精品亚洲一区二区三区喷水 | 国产性生大片免费观看性 | 麻豆人妻少妇精品无码专区 | 欧美第一黄网免费网站 | 综合激情五月综合激情五月激情1 | 男女爱爱好爽视频免费看 | 真人与拘做受免费视频 | 国产精品香蕉在线观看 | 国产精品无码mv在线观看 | 强伦人妻一区二区三区视频18 | 99国产精品白浆在线观看免费 | 国产精品高潮呻吟av久久 | 欧美色就是色 | 人人爽人人爽人人片av亚洲 | 亚洲精品成a人在线观看 | 暴力强奷在线播放无码 | 无套内谢的新婚少妇国语播放 | 精品国产成人一区二区三区 | 熟妇人妻中文av无码 | 无码人妻久久一区二区三区不卡 | 国产精华av午夜在线观看 | 亚洲综合久久一区二区 | 久久99精品国产.久久久久 | 丝袜 中出 制服 人妻 美腿 | 久久亚洲中文字幕无码 | 日日干夜夜干 | 午夜福利一区二区三区在线观看 | 波多野结衣一区二区三区av免费 | 国产成人精品必看 | а√天堂www在线天堂小说 | 人妻无码αv中文字幕久久琪琪布 | 日本丰满熟妇videos | 狠狠噜狠狠狠狠丁香五月 | 国产精品久久久久久久9999 | 国产亚洲精品久久久久久大师 | 亚洲春色在线视频 | 久久无码中文字幕免费影院蜜桃 | 性啪啪chinese东北女人 | 人妻熟女一区 | 精品一区二区三区无码免费视频 | 精品无码国产一区二区三区av | 国产色视频一区二区三区 | 免费观看又污又黄的网站 | 日本熟妇浓毛 | aⅴ在线视频男人的天堂 | 无码人妻丰满熟妇区五十路百度 | 日韩精品成人一区二区三区 | 成人亚洲精品久久久久软件 | 欧美丰满熟妇xxxx性ppx人交 | 少妇性l交大片欧洲热妇乱xxx | 少妇一晚三次一区二区三区 | 国产成人无码a区在线观看视频app | 日本大香伊一区二区三区 | 成人性做爰aaa片免费看 | 亚洲欧美精品aaaaaa片 | 中文字幕无码人妻少妇免费 | 免费乱码人妻系列无码专区 | 久久伊人色av天堂九九小黄鸭 | 精品人妻中文字幕有码在线 | 乱码午夜-极国产极内射 | 在线精品国产一区二区三区 | 小泽玛莉亚一区二区视频在线 | 丝袜人妻一区二区三区 | 性开放的女人aaa片 | 日本熟妇人妻xxxxx人hd | 少妇久久久久久人妻无码 | 樱花草在线社区www | 人人澡人人妻人人爽人人蜜桃 | 牲欲强的熟妇农村老妇女 | 国产又爽又黄又刺激的视频 | 久久精品无码一区二区三区 | 西西人体www44rt大胆高清 | 久久久久久久女国产乱让韩 | 一本久久a久久精品vr综合 | 欧美日韩人成综合在线播放 | 欧美兽交xxxx×视频 | 无码人妻久久一区二区三区不卡 | 亚洲欧美精品aaaaaa片 | 色婷婷欧美在线播放内射 | 伊人久久大香线焦av综合影院 | 国产xxx69麻豆国语对白 | 疯狂三人交性欧美 | 激情内射亚州一区二区三区爱妻 | 国产偷国产偷精品高清尤物 | 国产成人无码av在线影院 | 成年美女黄网站色大免费全看 | 免费视频欧美无人区码 | 动漫av一区二区在线观看 | 国产无遮挡又黄又爽又色 | 亚洲国产成人a精品不卡在线 | 一本加勒比波多野结衣 | 国产 浪潮av性色四虎 | 亚洲精品无码人妻无码 | 内射白嫩少妇超碰 | 久久综合网欧美色妞网 | 台湾无码一区二区 | 131美女爱做视频 | 国产电影无码午夜在线播放 | 国产麻豆精品精东影业av网站 | 少妇久久久久久人妻无码 | 亚洲の无码国产の无码影院 | 少妇高潮一区二区三区99 | 欧美日韩综合一区二区三区 | 欧美国产亚洲日韩在线二区 | 亚洲欧美色中文字幕在线 | 国产精品嫩草久久久久 | 亚洲 另类 在线 欧美 制服 | 精品厕所偷拍各类美女tp嘘嘘 | 中文精品久久久久人妻不卡 | 高潮毛片无遮挡高清免费视频 | 国产69精品久久久久app下载 | 青青久在线视频免费观看 | 亚洲综合伊人久久大杳蕉 | 正在播放东北夫妻内射 | 亚洲精品综合五月久久小说 | 欧美人妻一区二区三区 | 人人爽人人爽人人片av亚洲 | 亚洲精品国产品国语在线观看 | 中文字幕无线码免费人妻 | 狠狠综合久久久久综合网 | 日本免费一区二区三区最新 | 97精品国产97久久久久久免费 | 国产两女互慰高潮视频在线观看 | 十八禁真人啪啪免费网站 | 免费无码的av片在线观看 | 国产亚洲美女精品久久久2020 | 亚洲精品国偷拍自产在线观看蜜桃 | 国产精品成人av在线观看 | 中文字幕无码人妻少妇免费 | 久久精品人妻少妇一区二区三区 | 兔费看少妇性l交大片免费 | 久久99久久99精品中文字幕 | 色综合久久88色综合天天 | 骚片av蜜桃精品一区 |