linux內(nèi)存管理把這個(gè)內(nèi)存空間分為了兩塊 一塊是0-3G的用戶空間,一塊是3G-4G的內(nèi)核空間。一般的程序分配內(nèi)存是在用戶空間分配。所以,這個(gè)地址是正常的。
創(chuàng)新互聯(lián)成都企業(yè)網(wǎng)站建設(shè)服務(wù),提供成都網(wǎng)站制作、網(wǎng)站建設(shè)、外貿(mào)網(wǎng)站建設(shè)網(wǎng)站開發(fā),網(wǎng)站定制,建網(wǎng)站,網(wǎng)站搭建,網(wǎng)站設(shè)計(jì),成都響應(yīng)式網(wǎng)站建設(shè)公司,網(wǎng)頁(yè)設(shè)計(jì)師打造企業(yè)風(fēng)格網(wǎng)站,提供周到的售前咨詢和貼心的售后服務(wù)。歡迎咨詢做網(wǎng)站需要多少錢:13518219792
malloc分配內(nèi)存的時(shí)候,是在一個(gè)線性區(qū)里面分配,每個(gè)程序都有屬于自己的線性區(qū)。如果這個(gè)地址恰好分配在不屬于自己進(jìn)程的線性區(qū)里面。那么肯定是會(huì)報(bào)段錯(cuò)誤。
段錯(cuò)誤不是內(nèi)核空間才會(huì)發(fā)生的事情。
用戶程序只能訪問屬于自己的線性區(qū),這個(gè)線性區(qū)是屬于用戶空間的。用戶程序不能直接訪問內(nèi)核空間。
這些知識(shí)都是屬于linux內(nèi)核的。如果不清楚的話,可以看看內(nèi)核方面的書。
我這里是ubuntu x86-64,照著抄你的代碼運(yùn)行非常正常。
編譯運(yùn)行:
as run.s -o run.o
ld run.o -o run
./run
GDB調(diào)試也沒問題
GNU gdb (Ubuntu 8.1.1-0ubuntu1) 8.1.1
Copyright (C) 2018 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later ;
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law. Type "show copying"
and "show warranty" for details.
This GDB was configured as "x86_64-linux-gnu".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
;.
Find the GDB manual and other documentation resources online at:
;.
For help, type "help".
Type "apropos word" to search for commands related to "word"...
Reading symbols from run...done.
(gdb) b _start
Breakpoint 1 at 0x400078: file run.s, line 6.
(gdb) r
Starting program: /home/×××××××/Desktop/run
Breakpoint 1, _start () at run.s:6
6 movl $1, %eax
(gdb) ni
7 movl $0, %ebx
(gdb) ni
8 int $0x80
(gdb) ni
[Inferior 1 (process 10617) exited normally]
(gdb) b _start
如果不是自己寫的程序,建議先閱讀一下文檔
是不是文件的權(quán)限,目錄,環(huán)境變量,使用方法等有問題。
如果是自己寫的
那么出現(xiàn)段錯(cuò)誤 有可能是越界等錯(cuò)誤
建議GDB調(diào)試,或檢查源碼
/*************************************
文件名: server.c
linux 下socket網(wǎng)絡(luò)編程簡(jiǎn)例 - 服務(wù)端程序
服務(wù)器端口設(shè)為 0x8888 (端口和地址可根據(jù)實(shí)際情況更改,或者使用參數(shù)傳入)
服務(wù)器地址設(shè)為 192.168.1.104
作者:kikilizhm#163.com (將#換為@)
*/
#include stdlib.h
#include sys/types.h
#include stdio.h
#include sys/socket.h
#include linux/in.h
#include string.h
int main()
{
int sfp,nfp; /* 定義兩個(gè)描述符 */
struct sockaddr_in s_add,c_add;
int sin_size;
unsigned short portnum=0x8888; /* 服務(wù)端使用端口 */
printf("Hello,welcome to my server !\r\n");
sfp = socket(AF_INET, SOCK_STREAM, 0);
if(-1 == sfp)
{
printf("socket fail ! \r\n");
return -1;
}
printf("socket ok !\r\n");
/* 填充服務(wù)器端口地址信息,以便下面使用此地址和端口監(jiān)聽 */
bzero(s_add,sizeof(struct sockaddr_in));
s_add.sin_family=AF_INET;
s_add.sin_addr.s_addr=htonl(INADDR_ANY); /* 這里地址使用全0,即所有 */
s_add.sin_port=htons(portnum);
/* 使用bind進(jìn)行綁定端口 */
if(-1 == bind(sfp,(struct sockaddr *)(s_add), sizeof(struct sockaddr)))
{
printf("bind fail !\r\n");
return -1;
}
printf("bind ok !\r\n");
/* 開始監(jiān)聽相應(yīng)的端口 */
if(-1 == listen(sfp,5))
{
printf("listen fail !\r\n");
return -1;
}
printf("listen ok\r\n");
char gc;
while(1)
{
sin_size = sizeof(struct sockaddr_in);
/* accept服務(wù)端使用函數(shù),調(diào)用時(shí)即進(jìn)入阻塞狀態(tài),等待用戶進(jìn)行連接,在沒有客戶端進(jìn)行連接時(shí),程序停止在此處,
不會(huì)看到后面的打印,當(dāng)有客戶端進(jìn)行連接時(shí),程序馬上執(zhí)行一次,然后再次循環(huán)到此處繼續(xù)等待。
此處accept的第二個(gè)參數(shù)用于獲取客戶端的端口和地址信息。
*/
nfp = accept(sfp, (struct sockaddr *)(c_add), sin_size);
if(-1 == nfp)
{
printf("accept fail !\r\n");
return -1;
}
printf("accept ok!\r\nServer start get connect from %#x : %#x\r\n",ntohl(c_add.sin_addr.s_addr),ntohs(c_add.sin_port));
/* 這里使用write向客戶端發(fā)送信息,也可以嘗試使用其他函數(shù)實(shí)現(xiàn) */
if(-1 == write(nfp,"hello,welcome to my server \r\n",32))
{
printf("write fail!\r\n");
return -1;
}
while((gc = getchar()) != EOF) /* 按ctrl + z 鍵結(jié)束,或者給定一個(gè)特殊字符,如'#',即 hile((gc = getchar()) != '#') */
{
write(nfp,gc,1);
}
printf("write ok!\r\n");
close(nfp);
}
close(sfp);
return 0;
}
如果只有root用戶才出錯(cuò)的話,而其他用戶可以成功執(zhí)行,那就先排除命令本身的問題。
你可以對(duì)比一下root用戶和可以成功執(zhí)行的用戶兩者間的環(huán)境差異,用set命令各導(dǎo)出一份環(huán)境變量列表,看是否哪里有不同。
另外,還可以對(duì)比檢查一下ulimit
-a,看是否不同。
有的時(shí)候,普通用戶和root的PATH和LD_LIBRARY_PATH設(shè)置的不同會(huì)導(dǎo)致一些異常,比如說(shuō)執(zhí)行的根本不是同一個(gè)路徑下的命令。
網(wǎng)站標(biāo)題:linux命令段錯(cuò)誤 linux中段錯(cuò)誤
分享URL:http://chinadenli.net/article36/hgojpg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供定制網(wǎng)站、ChatGPT、搜索引擎優(yōu)化、網(wǎng)站收錄、小程序開發(fā)、網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)