假定“int buf[4]={100, 20, 1, 8};”所定义的buf被分配在静态数据区,其首地址为0x08048930,“int *bufp1;”为未初始化全局变量。以下关于“bufp1 = buf[1];”的重定位的描述中,错误的是()。A.buf被定义在.data节中,共占16个字节B.bufp1被定义在.bss节中,共占4个字节C.bufp1和buf对应的重定位信息都在.rel.text节中D.bufp1和buf重定位处的初值都是0且都采用绝对地址方式

假定“int buf[4]={100, 20, 1, 8};”所定义的buf被分配在静态数据区,其首地址为0x08048930,“int *bufp1;”为未初始化全局变量。以下关于“bufp1 = &buf[1];”的重定位的描述中,错误的是()。

A.buf被定义在.data节中,共占16个字节

B.bufp1被定义在.bss节中,共占4个字节

C.bufp1和buf对应的重定位信息都在.rel.text节中

D.bufp1和buf重定位处的初值都是0且都采用绝对地址方式


参考答案和解析
bufp1 和 buf 重定位处的初值都是 0 且都采用绝对地址方式

相关考题:

指令的操作数中,允许出现表达式,例如BUF1与BUF2均为变量名,下面指令中语法正确的是()。 A、MOVAX,BUFl*BUF2B、MOVAX,BUF1/BUF2C、MOVAX,BUF1+ES:BUF2D、MOVAX,BUF2-BUF1

● 试题四请阅读以下说明和Socfort程序,将应填(n)处的字句写在答题纸的对应栏内。【说明】网络应用的基本模型是客户机/服务器模型,这是一个不对称的编程模型,通信的双方扮演不同的角色:客户机和服务器。以下是一个简单的客户机程序(服务器程序略),其工作过程非常简单:客户机与服务器建立连接后,接收服务器向客户机返回的一条消息。程序中用到了两种结构hostent与sockaddr_in:hostent类型的结构定义如下:struct hostent { char*h_name;//主机的正式名称char**h_aliases;//别名列表int h_addrtype;//主机地址类型:AF-XXXint H_length;//主机地址长度:4 B(32 b)char**h_addr_list;//主机IP地址列表}#define h-addr h-addr-list[0]sockaddr_in类型的结构定义:sockaddr_in是通用套接字结构sockaddr在TCP/IP协议下的结构重定义,为TCP/IP套接字地址结构。Struct sockaddrin{short int sin-family;//地址类型AF_XXX,其中AF_INET为TCP/IP专用unsigned short int sin-port;//端口号struct in_addr sin_addr;//Internet地址//端口号以及Internet地址使用的是网络字节顺序,需要通过函数htons转换}struct iN_addr{_u32 s-addr;//类型为unsignel-long}程序中使用到了多个函数:struct hostent * gethostbyname(const char* hostname);函数gethostbyname查询与指定的域名地址对应的IP地址,返回一个hostent结构的指针,如果不成功则返回NULL。int_socket(int domain,im-type,int protoco1);函数socket创建一个套接字描述符,如果失败返回-1。domain为地址类型,type为套接字类型,本题中为SOCK_STREAM;protocol指定协议,本题中为0。int connect(int sockfd,struct sockaddr* servaddr,int addrlen);函数connect与服务器建立一个连接,成功返回0,失败返回-1。servaddr为远程服务器的套接字地址,包括服务器的IP地址和端口号;addrlen为地址的长度。int read(int fd,char*bur,int len);int write(int fd,char*buf,int len);函数read和write从套接字读和写数据,成功返回数据量大小,否则返回-1。buf指定数据缓冲区,len指定接收或发送的数据量大小。【Socket程序】//程序中引用的头文件略#definePORT 3490//定义端口号为3490int main(int argc,char*argv[]){int sockfd,nbytes;//套接字描述符、读入缓冲区的字节数char buf[1024];//缓冲区struct hostent*he;//主机信息类型struct (1) srvaddr;//Internet套接字结构if(argc!=2){perror("调用参数为零,请输入服务器的主机名!\n");exit (1) ;}if( (2) )//如果通过主机名没有获得对应的主机信息就提示用户{perror("无法通过主机名获得主机信息!\n");exit (1) ;}if( (3) ) //在无法创建套接字时,提示用户{perror("无法创建套按字!\n");exit (1) ;}bzero(srvaddr, (4) );//置空srvaddrsraddr,sin_family=AF_INET;srvaddr,sin_port: htons(PORT);srvaddr.sin_addr: (5) ;//设置套接字结构的各项信息,其中的地址来自域名查询后的hp变量if(connect(sockfd,(n) ,sizeof(struct sockaddr))==-1){perror("连接失败!\n");exit (1) ;}//连接服务器,如果失败则提示用户if((nbytes=read(sockfd,buf,MAXDATASIZE))=-1){perror("读失败!\n");exit (1) ;}//从套接字中读出数据buf[nbytes]=\0;printf("读到的内容:%s",buf);close(sockfd);//打印数据并关闭套接字}

下面程序的预设功能是:将文本文件readme 中的内容读出,显示在屏幕上。 include using n 下面程序的预设功能是:将文本文件readme 中的内容读出,显示在屏幕上。include <fstream>using namespace std;int main (){char buf[ 80 ];ifstream file( "readme");while (_______________){file.getline( buf, 80 );cout<<buf<<end1;}me. close();}则程序中空白处应填入的语句为【 】。

若有BUF DW 1,2,3,4,则可将数据02H取到AL寄存器中的指令是A.MOV AL,BYTE PTR[BUF+1]B.MOV AL,BYTE PTR[BUF+2]C.MOV AL,BYTE PTR[BUF+3]D.MOV AL,BYTE BUF[2]

若有BUF DW 1,2,3,4,则可将数据02H取到AL寄存器中的指令是( )。A.MOV AL,BYTE PTR [BUF+1]B.MOV AL,BYTE PTR[BUF+2]C.MOV AL,BYTE PTR[BUF+3]D.MOV AL,BUF [2]

请阅读以下说明和Socket程序,填入(n)处。网络应用的基本模型是客户机/服务器模型,这是一个不对称的编程模型,通信的双方扮演不同的角色:客户机和服务器。本题中的程序,客户机接收用户在键盘上输入的文字内容,服务器将客户机发送来的文字内容直接返回给客户机。此程序中,用户自定义函数有:int read_all( int fd, void*buf, int nbyte );函数read all从参数fd指定的套接字描述符中读取nbytes字节数据至缓冲区buf中,成功返回实际读的字节数(可能小于nbyte),失败返回-1。int write_all( int fd, void*buf, int nbyte );函数write_all向参数fd指定的套接字描述符中写入缓冲区buf前nbyte字节的数据,成功返回实际写的字节数(始终等于nbyte),失败返回-1。write_requ函数为客户机发送请求的函数;read_requ函数为服务器获取请求的函数服务器主程序部分:define SERVER_PORT 8080 //服务器监听端口号为8080define BACKLOG 5 //连接请求队列长度int main( int argc, char*argv[]) {int listenfd, connfd //监听套接字、连接套接字描述符struct sockaddr_in servaddr; //服务器监听地址listenfd=(1); //创建用于监听的套接字if (listenfd<0) {fPrintf( stderr,"创建套接字错误!");exit(1);} //套接字创建失败时打印错误信息bzero(servaddr.sizeof(servadd));//将地址结构置空servaddr.sin_family=AF_INET;//设置地址结构遵循TCP/IP协议servaddr.sin_addrs_addr=htonl.(2);//设置监听的IP地址为任意合法地址,并将该地址转换为网络字节顺序servaddr.sin_port=(3);//设置监听的端口,并转化为网络字节顺序if ( bind(4)<0 ) {fprintf( stderr,"绑定套接字与地址!");exit(1);} //将监听地址与用于监听的套接字绑定,绑定失败时打印错误信息if ( listen( listedfd, BACKLOG)<0) {fprintf( stderr,"转换套接字为监听套接字!");exit(1);} //将用于监听的套接字由普通套接字转化为监听套接字for(;){connfd=(5);//从监听套接字的连接队列中接收已经完成的连接,并创建新的连接套接字if(connfd<0){fprintf(stderr,"接收连接失败!");exit(1);} //接收失败打印错误信息serv_respon(connfd); //运行服务器的处理函数(6);//关闭连接套接字 }close(listenfd);//关闭监听套接字 }服务器通信部分:include<stdio.h>……//引用头文件部分略>void serv_respon( int sockfd) {int nbytes; char buf[1024];for(;;) {nbytes=read_requ(sockfd, buf, 1024);//读出客户机发出的请求,并分析其中的协议结构,获知请求的内容部分的长度,并将内容复制到缓冲区buf中,if ( nbytes=0) return;//如客户机结束发送就退出else if ( bytes<0 ) {fprintf( siderr,"读错误情息:%s\n", sterror( errno ));return;}//读请求错误打印错误信息if ( write_all ( sockfd, buf, nbytes)<0)//将请求中的内容部分反向发送回客户机fprintf( siderr,"写错误信息:%s\n", strerror( errno ) );}}int read_requ( int sockfd, char*buf int size ) {char inbuf[256];int n; int i;i=read_line( sockfd, inbuf, 256 );//从套接字接收缓冲区中读出一行数据,该数据为客户请求的首部if(1<O)return(1);else if ( i=0 ) return(0);if ( strncmp( inbuf,"",6 )=0)sscanf( (7),"%d", n );//从缓冲区buf中读出长度信息else{sprintf( buf," ",14 );return(14);}//取出首部Length域中的数值,该数值为内容部分的长度return( read_all( sockfd, buf, n ) );//从接收缓冲区中读出请求的内容部分}int get_char(int fd, char*ch) {static int ffset=0;static int size=0;static char buff[1024];//声明静态变量,在get_char多次被调用期间,该变量的内存不释放for ( ;size<=0 ||(8);) {size=read(fd,buf,1024);//一次从套接字缓冲区中读出一个数据块if ( size<0 ) {if ( errno=EINTR ) {size=0;confine;//EINTR表示本次读操作没有成功,但可以继续使用该套接字读出数i}elsereturn(-1);}ffset=0;//读出数据后,将偏址置为0}*ch=buf[(9)];//将当前的字符取出,并将偏址移向下一字符return(1);}int read_line(int fd, char*buf, int maxlen) {int i,n;char ch;for ( i=0; i<maxlen;) {n = get_char( fd, ch );//取出一个字符if ( n==1 ){buff[i++]=ch;//将字符加入字符串中if ( (10) break;}else if ( n< ) return(-1);else break;}buf[i]='\0';return(i);}//函数read_line的作用

如果数据段有如下定义,则编译后变量BUF分配的字节数为 BUF DW 12,34,56,78 LL DB 5A.8个字节B.4个字节C.9个字节D.1个字节

数据段中语句如下:BUF1DB3DUP(0,2DUP(1,2),3)COUNTEQU$-BUF1与符号COUNT不等价的值是()A、6B、18C、16D、.8

有以下程序:includeincludeusing namespace std;int main(){fstream file;fi 有以下程序:include<iostream>include<fstream>using namespace std;int main(){fstream file;file.open("abc.txt", ios :: in);if ( !file ){cout<<"Can not open abc.txt"<<end1;abort();}char buf[ 80 ];int i = 0;while (!file.eof()){file.getline(buf,80);i++;}cout<<"Lines :"<<i<<end1;file.close();return 0;}程序实现的功能是【 】。

请阅读以下说明和Socfort程序,将应填(n)处的字句写在对应栏内。网络应用的基本模型是客户机/服务器模型,这是一个不对称的编程模型,通信的双方扮演不同的角色:客户机和服务器。以下是一个简单的客户机程序(服务器程序略),其工作过程非常简单:客户机与服务器建立连接后,接收服务器向客户机返回的一条消息。程序中用到了两种结构hostent与sockaddr_in:hostent类型的结构定义如下:struct hostent { char * h_name; //主机的正式名称char * * h-aliases; //别名列表int h_addrtype; //主机地址类型:AF-XXXint H_length; //主机地址长度:4 B(32 b)char * * h_addr_list; //主机IP地址列表}define h???-addr h-addr-liSt[0]sockaddr_in类型的结构定义:sockaddr_in是通用套接字结构sockaddr在TCP/IP协议下的结构重定义,为TCP/IP套接字地址结构。Struct sockaddrin{short int sin-family;//地址类型AF_XXX,其中AF_INET为TCP/P专用unsigned short int sin-port; //端口号struct in_addr Sin_addr; //Internet地址//端口号以及Internet地址使用的是网络字节顺序,需要通过函数htons转换}struct iN_addr{_u32 s-addr; //类型为unsignel-long}程序中使用到了多个函数:struct hostent * gethostbyname(const char * hostname);函数gethostbyname查询与指定的域名地址对应的IP地址,返回一个hostent结构的指针,如果不成功则返回NULL。Int?_socket(int domain,im-type,int protoco1);函数socket创建一个套接字描述符,如果失败返回-1。domain为地址类型,type为套接字类型,本题中为SOCK_STREAM;protocol指定协议,本题中为0。int connect(int sockfd,struct sockaddr * servaddr,int addrlen);函数connect与服务器建立一个连接,成功返回0,失败返回-1。servaddr为远程服务器的套接字地址,包括服务器的IP地址和端口号;addrlen为地址的长度。int read(intfd,char * bur,int len);int write(intfd,char * buf,int len);函数read和write从套接字读和写数据,成功返回数据量大小,否则返回-1。buf指定数据缓冲区,len指定接收或发送的数据量大小。[Socket程序]//程序中引用的头丈件略definePORT 3490//定,义端口号为3490int main(int argc,char * argv[]){int tsockfd,nbytes;//套接字描述符、读入缓冲区的字节数char buf[1024];//缓冲区struct hostent * he;//主机信息类型struct (1) srvadd;//Internet套接字结构if(argc!=2){perror(“调用参数为零,请输入服务器的主机名!\n”);exit(1);}if((2))//如果通过主机名没有获得对应的主机信息就提示用户{perror(“无法通过主机名获得主机信息!\n”);exit(1);}if((3))//在无法创建套接字时,提示用户{perror(“无法创建套按字!\n”);exit(1);}bzero(srvaddr, (4));//置空srvaddrsraddr,SIR_family=AF_INET;srvaddr,sln_port:htons(PO日T);srvaddr.sin_addr: (5);//设置套接字结构的各项信息,其中的地址来自域名查询后的hp变量if(connect(sockfd,(n),sizeof(struct sockaddr))==-1){perror("连接失败!\n");exit(1);}//连接服务器,如果失败则提示用户if((nbytes=read(sockfd,buf,MAXDATASIZE))=-1){perror("读失败!\n");exit(1);}//从套接字中读出数据buf[nbytes]='\0';printf("读到的内容:%s",buf);CIose(SOCkfd);//打印数据并关闭套接字

阅读下列说明,回答问题 1 至问题 4 ,将解答写在答题纸的对应栏内。 【说明】 基于 Windows32 位系统分析下列代码,回答相关问题 。 void Challenge(char *str) { char temp[9]={0}; strncpy(temp,str,8); printf(temp=%s\n,temp); if(strcmp(tempPlease!@)==0){ printf(KEY: ****); } } int main(int argc,char *argv[ ]) { Char buf2[16] Int check=1; Char buf[8] Strcpy (buf2, give me key! !); strcpy(buf,argv[1]); if(check==65) { Challenge(buf); } else { printf(Check is not 65 (%d) \n Program terminated!!\n,check); } Return 0; }【问题 1】(3 分) main 函数内的三个本地变量所在的内存区域称为什么?它的两个最基本操作是什么? 【问题 2】(3分) 画出buf,check,buf2 三个变量在内存的布局图。【问题 3】(2分) 应该给程序提供什么样的命令行参数值(通过argv变量传递)才能使程序执行流程进入判断语句 If(check=65)....然后调用challenge( )函数。 【问题4】(4分) 上述代码所存在的漏洞名字是什么,针对本例代码,请简要说明如何修正上述代码以修补次漏洞。

已知BUF偏移地址为58ADH,定义BUF DW 20DUP(?)后,该数组最后一个字数据的偏移地址是多少?

有数据定义BUF DB 8DUP(3DUP(2),2DUP(3)),在BUF中能构成数据0302H有()。A、5个B、6个C、7个D、8个

有数据定义语句BUF DW 0ABH,1,10 DUP(3 DUP(1,0),2)汇编后,为变量BUF分配的存储单元字节数是()。A、48HB、90HC、120D、60

已知BUF偏移地址为25DBH,定义BUF DB 50DUP(?)后,该数组最后一个字节的偏移地址是多少?

有符号定义语句如下:  BUF DB 3,4,5,’123’  ABUF DB 0  L EQU ABUF-BUF  求L的值为多少?

下列指令格式不正确的为()A、MOV AX,1234HB、XCHG AX,BUFC、XCHGBUF,AXD、XCHG BUF1,BUF2

BUF DW 10H DUP(3 DUP(2,?),1,2 DUP(?),100)为变量BUF分配的内存空间的字节数是()。A、160B、22C、80D、320

以BUF1为起始地址的外部数据存储区中存放着16个单字节的无符号数,求其平均值并送入R2中。

阅读下列一段程序,分析数据段中BUF, DDBUF, DWBUF各变量的属性,并指出它们各自所在的段首址与偏移地址。程序中的DDBUF EQU THIS DWORD 和DWBUF EQU WORD PRT BUF两条语句有何功能? DATA    SEGMENT   DDBUF   EQU  THIS  DWORD  BUF     DB   100   DUP(?)  DWBUF   EQU  WORD  PRT BUF  DATA    ENDS          ┆  FIRST   EQU  THIS  FAR         LEA  SI , BUF          ┆

要在程序中定义缓冲区BUF,保留9个字节存储空间的语句是()。A、BUF    DW 9B、BUF    DB 9C、BUF    DB 9 DUP (?)D、BUF    DW 9 DUP (?)

若有BUF DW 1,2,3,4。则可将数据02H取到AL寄存器中的指令是:()。A、MOV  AL,BYTE PTRBUF+1B、MOV  AL,BYTE PTRBUF+2C、MOV  AL,BYTE PTRBUF+3D、MOV  AL,BYTE BUF2

数据定义如下:BUF1 DB 10 BUF2 DW 20DUP(?) 实现将BUF1单元的内容与BUF2开始的条三个字节单元内容相比较的指令是()。A、CMP BUF1,BYTE PTR BUF2+3B、MOV AL,BUF1 CMP AL,BUF2+2C、MOV AL,BUF1 CMP AL,BYTE PTR BUF2+2D、MOV AL,BUF1 CMP AL,BUF2+3

问答题已知BUF偏移地址为58ADH,定义BUF DW 20DUP(?)后,该数组最后一个字数据的偏移地址是多少?

问答题已知BUF偏移地址为25DBH,定义BUF DB 50DUP(?)后,该数组最后一个字节的偏移地址是多少?

问答题以BUF1为起始地址的外部数据存储区中存放着16个单字节的无符号数,求其平均值并送入R2中。

问答题阅读下列一段程序,分析数据段中BUF, DDBUF, DWBUF各变量的属性,并指出它们各自所在的段首址与偏移地址。程序中的DDBUF EQU THIS DWORD 和DWBUF EQU WORD PRT BUF两条语句有何功能? DATA    SEGMENT   DDBUF   EQU  THIS  DWORD  BUF     DB   100   DUP(?)  DWBUF   EQU  WORD  PRT BUF  DATA    ENDS          ┆  FIRST   EQU  THIS  FAR         LEA  SI , BUF          ┆

单选题有数据定义语句BUF DW 0ABH,1,10 DUP(3 DUP(1,0),2)汇编后,为变量BUF分配的存储单元字节数是()。A48HB90HC120D60