亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費(fèi)注冊(cè) 查看新帖 |

Chinaunix

  平臺(tái) 論壇 博客 文庫(kù)
1234下一頁(yè)
最近訪(fǎng)問(wèn)板塊 發(fā)新帖
樓主: cdphp
打印 上一主題 下一主題

今天遇到的一個(gè)極品指針問(wèn)題 [復(fù)制鏈接]

論壇徽章:
0
21 [報(bào)告]
發(fā)表于 2008-01-02 21:40 |只看該作者
原帖由 xfly_t 于 2008-1-2 10:38 發(fā)表

你寫(xiě)的程序試過(guò)沒(méi)?



請(qǐng)把我的話(huà)看仔細(xì)點(diǎn), 我說(shuō)編譯鏈接都不應(yīng)該有問(wèn)題

我沒(méi)說(shuō)在linux-x86上運(yùn)行不會(huì)有問(wèn)題!

你知道編譯鏈接和運(yùn)行有什么區(qū)別么? 仔細(xì)想想


你執(zhí)行  gcc a.c 沒(méi)出任何錯(cuò),就說(shuō)明編譯鏈接沒(méi)有問(wèn)題。

但是在linux-x86上運(yùn)行這個(gè)應(yīng)用程序就會(huì)崩潰, 知道為什么么?
我寫(xiě)了2個(gè)示范代碼,一個(gè)是應(yīng)用程序的,一個(gè)是內(nèi)核模塊的。 你試過(guò)我寫(xiě)的內(nèi)核模塊沒(méi)有? 年輕人,請(qǐng)看話(huà)看仔細(xì)點(diǎn)

論壇徽章:
0
22 [報(bào)告]
發(fā)表于 2008-01-02 21:53 |只看該作者
oops... what a man...

論壇徽章:
0
23 [報(bào)告]
發(fā)表于 2008-01-02 22:05 |只看該作者
原帖由 beilian 于 2008-1-2 21:53 發(fā)表
oops... what a man...


These kids are all amateurish and I can't draw myself up......

論壇徽章:
0
24 [報(bào)告]
發(fā)表于 2008-01-02 22:08 |只看該作者

回復(fù) #18 fallshuang 的帖子

我真想罵你一句裘千仞.
你真的在2.6內(nèi)核中試了你那個(gè)內(nèi)核模塊嗎?
char *str = "aaaa";
*str = 'b';
這個(gè)語(yǔ)句能將str[0]的值變?yōu)?b'嗎?
你試試再說(shuō)話(huà).

很簡(jiǎn)單的一個(gè)問(wèn)題, 就是一個(gè)進(jìn)程的地址空間的權(quán)限問(wèn)題, 你非要弄個(gè)什么內(nèi)核模塊出來(lái). 還罵這罵那的, 看不慣不同的意見(jiàn).

論壇徽章:
0
25 [報(bào)告]
發(fā)表于 2008-01-02 22:22 |只看該作者
原帖由 scutan 于 2008-1-2 22:08 發(fā)表
我真想罵你一句裘千仞.
你真的在2.6內(nèi)核中試了你那個(gè)內(nèi)核模塊嗎?
char *str = "aaaa";
*str = 'b';
這個(gè)語(yǔ)句能將str[0]的值變?yōu)?b'嗎?
你試試再說(shuō)話(huà).

很簡(jiǎn)單的一個(gè)問(wèn)題, 就是一個(gè)進(jìn)程的地址空間的權(quán) ...

agree...
From C99 - 6.4.5 String literals
6   It is unspecified whether these arrays are distinct provided their elements have the appropriate values.  If the program attempts to modify such an array, the behavior is undefined.

論壇徽章:
0
26 [報(bào)告]
發(fā)表于 2008-01-03 09:27 |只看該作者
原帖由 scutan 于 2008-1-2 22:08 發(fā)表
我真想罵你一句裘千仞.
你真的在2.6內(nèi)核中試了你那個(gè)內(nèi)核模塊嗎?
char *str = "aaaa";
*str = 'b';
這個(gè)語(yǔ)句能將str[0]的值變?yōu)?b'嗎?
你試試再說(shuō)話(huà).

很簡(jiǎn)單的一個(gè)問(wèn)題, 就是一個(gè)進(jìn)程的地址空間的權(quán) ...



你看話(huà)請(qǐng)看仔細(xì)點(diǎn),年輕人不要激動(dòng)。我只說(shuō)執(zhí)行那個(gè)內(nèi)核模塊不會(huì)出錯(cuò),我沒(méi)說(shuō)缺省的內(nèi)核配置

char *str = "aaaa";
*str = 'b';

這個(gè)語(yǔ)句能將str[0]的值變?yōu)?b!

但是,如果你經(jīng)常debug kernel的話(huà),你就會(huì)很清楚在什么樣的kernel上這2段代碼會(huì)將str[0]的值變位'b' 。  這是debug kerenl的基本常識(shí)之一。

==================================
只要修改kernel的配置,使rodata可寫(xiě)
char *str = "aaaa";
*str = 'b';
這2句代碼就可以在內(nèi)核里修改字符串常量了。 知道該改內(nèi)核哪個(gè)地方么?


我的意思就一個(gè):
char *str = "aaaa";
*str = 'b';

這樣的代碼是符合ISO C99語(yǔ)法規(guī)范的。

這個(gè)問(wèn)題其實(shí)很簡(jiǎn)單,就是rodata的權(quán)限問(wèn)題,但是2樓的那位居然說(shuō)這2句代碼編譯應(yīng)該報(bào)錯(cuò),這是不對(duì)的。 我主要是反對(duì)2樓的觀點(diǎn),但是很多人都不仔細(xì)看我說(shuō)的話(huà)。
最好仔細(xì)看完別人說(shuō)的話(huà)再發(fā)表意見(jiàn)。

btw: 我很想知道我那句話(huà)是罵人的臟話(huà),謝謝賜教。

[ 本帖最后由 fallshuang 于 2008-1-3 09:49 編輯 ]

論壇徽章:
0
27 [報(bào)告]
發(fā)表于 2008-01-03 09:55 |只看該作者
這個(gè)問(wèn)題其實(shí)很簡(jiǎn)單,就是rodata的權(quán)限問(wèn)題,但是2樓的那位居然說(shuō)這2句代碼編譯應(yīng)該報(bào)錯(cuò),這是不對(duì)的。 我主要是反對(duì)2樓的觀點(diǎn),但是很多人都不仔細(xì)看我說(shuō)的話(huà)。
最好仔細(xì)看完別人說(shuō)的話(huà)再發(fā)表意見(jiàn)。


也不知道你是沒(méi)有“最好仔細(xì)看完別人說(shuō)的話(huà)再發(fā)表意見(jiàn)!,還是故意裝作沒(méi)看見(jiàn)。我已經(jīng)解釋過(guò)了我之所以說(shuō)一樓的例子編譯會(huì)報(bào)錯(cuò)是因?yàn)槔锩嬗玫搅宋炊x的變量 test。當(dāng)然,這肯定是樓主沒(méi)有把他的原始代碼copy上來(lái)的,而是重新輸入了一份,導(dǎo)致了這個(gè)筆誤。因此我還特意加了個(gè)

至于說(shuō)真正的錯(cuò)誤,以及什么時(shí)候會(huì)報(bào)錯(cuò)相信大家包括樓主自己都知道吧,畢竟這也不是什么高深問(wèn)題。犯不著牛皮哄哄的又是“規(guī)范”,又是“內(nèi)核”的吧。

ps. LZ 千萬(wàn)別改一樓的帖子呀,要不然我就說(shuō)不清了

[ 本帖最后由 lgfang 于 2008-1-3 09:57 編輯 ]

論壇徽章:
0
28 [報(bào)告]
發(fā)表于 2008-01-03 10:16 |只看該作者
原帖由 lgfang 于 2008-1-3 09:55 發(fā)表


也不知道你是沒(méi)有“最好仔細(xì)看完別人說(shuō)的話(huà)再發(fā)表意見(jiàn)!,還是故意裝作沒(méi)看見(jiàn)。我已經(jīng)解釋過(guò)了我之所以說(shuō)一樓的例子編譯會(huì)報(bào)錯(cuò)是因?yàn)槔锩嬗玫搅宋炊x的變量 test。當(dāng)然,這肯定是樓主沒(méi)有把他的原始代碼 ...


回頭看了下,沒(méi)注意到你re的帖子,呵呵。  

主要去re 14和24樓的帖子了

論壇徽章:
0
29 [報(bào)告]
發(fā)表于 2008-01-03 11:00 |只看該作者

回復(fù) #28 fallshuang 的帖子



不管怎么樣,還是從你那學(xué)了一招

論壇徽章:
0
30 [報(bào)告]
發(fā)表于 2008-01-03 13:47 |只看該作者
原帖由 fallshuang 于 2008-1-3 09:27 發(fā)表



你看話(huà)請(qǐng)看仔細(xì)點(diǎn),年輕人不要激動(dòng)。我只說(shuō)執(zhí)行那個(gè)內(nèi)核模塊不會(huì)出錯(cuò),我沒(méi)說(shuō)在缺省的內(nèi)核配置上

char *str = "aaaa";
*str = 'b';

這個(gè)語(yǔ)句能將str[0]的值變?yōu)?b!

但是,如果你經(jīng)常debug ker ...

本來(lái)都沒(méi)看這個(gè)帖子的,覺(jué)得這個(gè)問(wèn)題被說(shuō)了無(wú)數(shù)次,沒(méi)有什么新意,但沒(méi)想到還會(huì)引出爭(zhēng)論。
看了兄臺(tái)的發(fā)言和各位的回復(fù),覺(jué)得大家說(shuō)的都沒(méi)錯(cuò),但有幾點(diǎn)疑惑想請(qǐng)教一下。
首先,這個(gè)程序符合語(yǔ)法,不會(huì)有編譯錯(cuò)誤,那肯定是對(duì)的,兄臺(tái)和大家說(shuō)的都沒(méi)錯(cuò)。
其次,str被放在了.rodata段,也是對(duì)的,沒(méi)有異議。

再其次, whyglinux說(shuō)的也是正確的,確是運(yùn)行時(shí)發(fā)生的錯(cuò)誤。至于后來(lái)兄臺(tái)回復(fù)的一大段話(huà),我就補(bǔ)充一句,應(yīng)用程序編譯后就已確定加載的位置,不會(huì)發(fā)生relocation,所以兄臺(tái)提到relocation和load的區(qū)別,感覺(jué)和主題扯遠(yuǎn)了。當(dāng)然,我相信這個(gè)你是知道的,我只是補(bǔ)充。

最后,來(lái)看看兄臺(tái)提到的.rodata段在內(nèi)核中的問(wèn)題。
兄臺(tái)提到某種情況下編譯那段代碼,運(yùn)行可以不出錯(cuò)。雖然我不知道如何編譯,但理論上當(dāng)然是可以做到的,只要讓.rodata在頁(yè)表里有寫(xiě)權(quán)限就可以了。請(qǐng)教了朋友,也看了kernel的config文件,我還是沒(méi)找到打開(kāi)的選項(xiàng)。后來(lái)朋友指點(diǎn)了我一下,我想你說(shuō)的應(yīng)該是這個(gè)東西:CONFIG_DEBUG_RODATA, 不知對(duì)否。

在x86平臺(tái)下(其它平臺(tái)下該函數(shù)不一定被實(shí)現(xiàn)了),init/main.c中init函數(shù)中,調(diào)用了mark_rodata_ro()函數(shù),該函數(shù)的作用是將.rodata段在頁(yè)表中的屬性設(shè)置成只讀,去掉它,.rodata段就可寫(xiě)了。它受CONFIG_DEBUG_RODATA宏控制。

我知道兄臺(tái)是想論述,修改常量字符串不是在任何情況下都會(huì)出錯(cuò),但不管怎樣,這種用法除了在某些特定環(huán)境下(例如debug)外,都是不對(duì)的。無(wú)論內(nèi)核還是應(yīng)用程序。

[ 本帖最后由 zx_wing 于 2008-1-3 13:49 編輯 ]
您需要登錄后才可以回帖 登錄 | 注冊(cè)

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號(hào)-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號(hào):11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報(bào)專(zhuān)區(qū)
中國(guó)互聯(lián)網(wǎng)協(xié)會(huì)會(huì)員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過(guò)ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請(qǐng)注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP