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

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

Chinaunix

  平臺(tái) 論壇 博客 文庫
12下一頁
最近訪問板塊 發(fā)新帖
查看: 2752 | 回復(fù): 17
打印 上一主題 下一主題

[內(nèi)核入門] 疑問:匯編直接使用libc宏? [復(fù)制鏈接]

論壇徽章:
13
15-16賽季CBA聯(lián)賽之八一
日期:2016-07-08 21:00:1415-16賽季CBA聯(lián)賽之同曦
日期:2017-02-15 14:26:1515-16賽季CBA聯(lián)賽之佛山
日期:2017-02-20 14:19:2615-16賽季CBA聯(lián)賽之青島
日期:2017-05-07 16:49:1115-16賽季CBA聯(lián)賽之廣夏
日期:2017-07-30 09:13:1215-16賽季CBA聯(lián)賽之廣東
日期:2018-07-05 22:34:3615-16賽季CBA聯(lián)賽之江蘇
日期:2018-09-03 12:10:2115-16賽季CBA聯(lián)賽之上海
日期:2018-09-25 03:49:2215-16賽季CBA聯(lián)賽之廣東
日期:2018-09-25 04:09:12
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報(bào)告]
發(fā)表于 2016-11-28 14:31 |只看該作者 |倒序?yàn)g覽
實(shí)驗(yàn)環(huán)境:32位系統(tǒng)。

  • 調(diào)用printf()
  1. .section .data
  2. output:
  3.     .asciz "The result is %d\n"

  4. .section .bss
  5.     .lcomm fd, 4

  6. .section .text
  7. .globl _start
  8. _start:
  9.     movl $0xffffffff, fd
  10.     movl %esp, %ebp

  11.     pushl fd
  12.     pushl $output
  13.     call printf

  14.     pushl $0
  15.     call exit
復(fù)制代碼
xx[url=mailtox@xx:~/xxx/socket$]@xx:~/xxx/socket$[/url] as -otest.o test.s -g
xx[url=mailtox@xx:~/xxx/socket$]@xx:~/xxx/socket$[/url] ld test.o -lc -dynamic-linker /lib/ld-linux.so.2
xx[url=mailtox@xx:~/xxx/socket$]@xx:~/xxx/socket$[/url] ./a.out
xx[url=mailtox@xx:~/xxx/socket$]@xx:~/xxx/socket$[/url] The result is 1

  • 調(diào)用socket()
  1. .include "sys/socket.h"

  2. .section .data
  3. output:
  4.     .asciz "The result is %d\n"

  5. .section .bss
  6.     .lcomm fd, 4

  7. .section .text
  8. .globl _start
  9. _start:
  10.     movl $0xffffffff, fd
  11.     movl %esp, %ebp

  12.     pushl 0
  13.     pushl $SOCK_STREAM
  14.     pushl $AF_INET
  15.     call socket
  16.     movl %eax, fd

  17.     pushl fd
  18.     pushl $output
  19.     call printf

  20.     pushl $0
  21.     call exit
復(fù)制代碼
多了幾行代碼,希望用fd保存socket()返回值。
① 由于鏈接時(shí)報(bào)SOCK_STREAM、AF_INET未定義,添加.include "sys/socket.h":
xx[url=mailtox@xx:~/xxx/socket$]@xx:~/xxx/socket$[/url] as -osocket.o socket.s -g
xx[url=mailtox@xx:~/xxx/socket$]@xx:~/xxx/socket$[/url] socket.s:1: Error: can't open sys/socket.h for reading: No such file or directory
② 編譯時(shí)指令sys/socket.h路徑:
xx[url=mailtox@xx:~/xxx/socket$]@xx:~/xxx/socket$[/url] as -osocket.o socket.s -I/usr/include/i386-linux-gnu -g
報(bào)了一堆錯(cuò),因?yàn)閟ys/socket.h畢竟是個(gè)C頭文件。

請(qǐng)問不想到C的.h頭文件去確定SOCK_STREAM、AF_INET值,就是希望能在匯編里直接用這兩個(gè)C的宏,怎么做?


論壇徽章:
13
15-16賽季CBA聯(lián)賽之八一
日期:2016-07-08 21:00:1415-16賽季CBA聯(lián)賽之同曦
日期:2017-02-15 14:26:1515-16賽季CBA聯(lián)賽之佛山
日期:2017-02-20 14:19:2615-16賽季CBA聯(lián)賽之青島
日期:2017-05-07 16:49:1115-16賽季CBA聯(lián)賽之廣夏
日期:2017-07-30 09:13:1215-16賽季CBA聯(lián)賽之廣東
日期:2018-07-05 22:34:3615-16賽季CBA聯(lián)賽之江蘇
日期:2018-09-03 12:10:2115-16賽季CBA聯(lián)賽之上海
日期:2018-09-25 03:49:2215-16賽季CBA聯(lián)賽之廣東
日期:2018-09-25 04:09:12
2 [報(bào)告]
發(fā)表于 2016-11-28 15:49 |只看該作者
本帖最后由 _nosay 于 2016-11-28 16:08 編輯

回復(fù) 1# _nosay


跳過libc,自己直接使用系統(tǒng)調(diào)用sys_socketcall()(int 0x80,系統(tǒng)調(diào)用號(hào)傳102):int sys_socketcall(int call, unsigned long *args),它是sys_socket()、sys_bind()、sys_listen()等函數(shù)的入口,由第一次參數(shù)call區(qū)分,args是調(diào)用前為這些函數(shù)構(gòu)造的所需信息的地址。

http://www.cnblogs.com/hyd-desert-camel/p/3536341.html?utm_source=tuicool&utm_medium=referral
http://blog.csdn.net/cedricporter/article/details/6786700

論壇徽章:
13
15-16賽季CBA聯(lián)賽之八一
日期:2016-07-08 21:00:1415-16賽季CBA聯(lián)賽之同曦
日期:2017-02-15 14:26:1515-16賽季CBA聯(lián)賽之佛山
日期:2017-02-20 14:19:2615-16賽季CBA聯(lián)賽之青島
日期:2017-05-07 16:49:1115-16賽季CBA聯(lián)賽之廣夏
日期:2017-07-30 09:13:1215-16賽季CBA聯(lián)賽之廣東
日期:2018-07-05 22:34:3615-16賽季CBA聯(lián)賽之江蘇
日期:2018-09-03 12:10:2115-16賽季CBA聯(lián)賽之上海
日期:2018-09-25 03:49:2215-16賽季CBA聯(lián)賽之廣東
日期:2018-09-25 04:09:12
3 [報(bào)告]
發(fā)表于 2016-11-29 18:20 |只看該作者
本帖最后由 _nosay 于 2016-11-29 20:34 編輯

回復(fù) 1# _nosay



換成.S(大寫)后綴,include .h文件了,編譯階段沒報(bào)錯(cuò),但鏈接時(shí)說宏沒定義,看來是編譯階段沒有做預(yù)處理,是不是要加什么選項(xiàng)?

論壇徽章:
13
15-16賽季CBA聯(lián)賽之八一
日期:2016-07-08 21:00:1415-16賽季CBA聯(lián)賽之同曦
日期:2017-02-15 14:26:1515-16賽季CBA聯(lián)賽之佛山
日期:2017-02-20 14:19:2615-16賽季CBA聯(lián)賽之青島
日期:2017-05-07 16:49:1115-16賽季CBA聯(lián)賽之廣夏
日期:2017-07-30 09:13:1215-16賽季CBA聯(lián)賽之廣東
日期:2018-07-05 22:34:3615-16賽季CBA聯(lián)賽之江蘇
日期:2018-09-03 12:10:2115-16賽季CBA聯(lián)賽之上海
日期:2018-09-25 03:49:2215-16賽季CBA聯(lián)賽之廣東
日期:2018-09-25 04:09:12
4 [報(bào)告]
發(fā)表于 2016-11-29 20:31 |只看該作者
回復(fù) 3# _nosay

我發(fā)現(xiàn)as把#當(dāng)前注釋了,所以.h里面的那些#define xx都被當(dāng)成注釋行了。

論壇徽章:
13
15-16賽季CBA聯(lián)賽之八一
日期:2016-07-08 21:00:1415-16賽季CBA聯(lián)賽之同曦
日期:2017-02-15 14:26:1515-16賽季CBA聯(lián)賽之佛山
日期:2017-02-20 14:19:2615-16賽季CBA聯(lián)賽之青島
日期:2017-05-07 16:49:1115-16賽季CBA聯(lián)賽之廣夏
日期:2017-07-30 09:13:1215-16賽季CBA聯(lián)賽之廣東
日期:2018-07-05 22:34:3615-16賽季CBA聯(lián)賽之江蘇
日期:2018-09-03 12:10:2115-16賽季CBA聯(lián)賽之上海
日期:2018-09-25 03:49:2215-16賽季CBA聯(lián)賽之廣東
日期:2018-09-25 04:09:12
5 [報(bào)告]
發(fā)表于 2016-11-29 21:23 |只看該作者
回復(fù) 4# _nosay

http://blog.csdn.net/qqliyunpeng/article/details/45116615,這里說“# 注釋掉一整行
http://blog.csdn.net/suyong_yq/article/details/14002183?_t=t,這里又說在IAR匯編中可以使用#define、#include這些C風(fēng)格預(yù)編譯指令。

http://72891.cn/thread-4256800-1-1.html,glibc中的sysdeps/unix/sysv/linux/socket.S里面出現(xiàn)了好多#define、#include,那么socket.S是不是得用IAR的編譯器編譯呀

論壇徽章:
6
2015年辭舊歲徽章
日期:2015-03-05 16:13:092015年迎新春徽章
日期:2015-03-05 16:13:092015小元宵徽章
日期:2015-03-06 15:58:1815-16賽季CBA聯(lián)賽之浙江
日期:2016-11-05 14:38:4115-16賽季CBA聯(lián)賽之新疆
日期:2016-11-11 18:38:06
6 [報(bào)告]
發(fā)表于 2016-11-30 09:54 |只看該作者
用gcc處理.S時(shí)可以包含C頭文件。只是你這例子里不光是預(yù)處理器的問題:
pushl $SOCK_STREAM
pushl $AF_INET

$AF_INET可以預(yù)處理得到$2,但SOCK_STREAM是枚舉常量,這是C語言中的概念,預(yù)處理器也無法替換它。

所以既然用匯編,最好還是用匯編的語法來重新定義所用的常數(shù)吧。

另外建議用64位環(huán)境,省得以后升級(jí)麻煩(對(duì)匯編來說更是很大很大的麻煩)

論壇徽章:
13
15-16賽季CBA聯(lián)賽之八一
日期:2016-07-08 21:00:1415-16賽季CBA聯(lián)賽之同曦
日期:2017-02-15 14:26:1515-16賽季CBA聯(lián)賽之佛山
日期:2017-02-20 14:19:2615-16賽季CBA聯(lián)賽之青島
日期:2017-05-07 16:49:1115-16賽季CBA聯(lián)賽之廣夏
日期:2017-07-30 09:13:1215-16賽季CBA聯(lián)賽之廣東
日期:2018-07-05 22:34:3615-16賽季CBA聯(lián)賽之江蘇
日期:2018-09-03 12:10:2115-16賽季CBA聯(lián)賽之上海
日期:2018-09-25 03:49:2215-16賽季CBA聯(lián)賽之廣東
日期:2018-09-25 04:09:12
7 [報(bào)告]
發(fā)表于 2016-11-30 11:18 |只看該作者
回復(fù) 6# 爻易

嗯,重新定義宏可以避開這個(gè)問題,但是我是搞明白這個(gè)問題,glibc好多.S文件都是直接包含了c的頭文件,我昨天忘記看glibc的makefile了。
還有就是如果宏可以枚舉不可以,鏈接時(shí)喂森么SOCK_STREAM、AF_INET都被報(bào)未定義?你可不可以先教我怎么讓宏不報(bào)錯(cuò)

論壇徽章:
6
2015年辭舊歲徽章
日期:2015-03-05 16:13:092015年迎新春徽章
日期:2015-03-05 16:13:092015小元宵徽章
日期:2015-03-06 15:58:1815-16賽季CBA聯(lián)賽之浙江
日期:2016-11-05 14:38:4115-16賽季CBA聯(lián)賽之新疆
日期:2016-11-11 18:38:06
8 [報(bào)告]
發(fā)表于 2016-11-30 20:10 |只看該作者
glibc是有好多.S文件都是直接包含了c的頭文件,但那些頭文件中基本只有預(yù)處理指令,沒有C語言的聲明語句,如頭文件sysdeps/unix/sysdep.h中,都是些#include,#define 之類'#'打頭的東東

你最好還是走正道,匯編的精神就是一步一個(gè)腳印

論壇徽章:
13
15-16賽季CBA聯(lián)賽之八一
日期:2016-07-08 21:00:1415-16賽季CBA聯(lián)賽之同曦
日期:2017-02-15 14:26:1515-16賽季CBA聯(lián)賽之佛山
日期:2017-02-20 14:19:2615-16賽季CBA聯(lián)賽之青島
日期:2017-05-07 16:49:1115-16賽季CBA聯(lián)賽之廣夏
日期:2017-07-30 09:13:1215-16賽季CBA聯(lián)賽之廣東
日期:2018-07-05 22:34:3615-16賽季CBA聯(lián)賽之江蘇
日期:2018-09-03 12:10:2115-16賽季CBA聯(lián)賽之上海
日期:2018-09-25 03:49:2215-16賽季CBA聯(lián)賽之廣東
日期:2018-09-25 04:09:12
9 [報(bào)告]
發(fā)表于 2016-11-30 20:16 |只看該作者
回復(fù) 8# 爻易


好的,可以加個(gè)友不?

論壇徽章:
6
2015年辭舊歲徽章
日期:2015-03-05 16:13:092015年迎新春徽章
日期:2015-03-05 16:13:092015小元宵徽章
日期:2015-03-06 15:58:1815-16賽季CBA聯(lián)賽之浙江
日期:2016-11-05 14:38:4115-16賽季CBA聯(lián)賽之新疆
日期:2016-11-11 18:38:06
10 [報(bào)告]
發(fā)表于 2016-11-30 20:29 |只看該作者
美女,可以有
您需要登錄后才可以回帖 登錄 | 注冊(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)專區(qū)
中國互聯(lián)網(wǎng)協(xié)會(huì)會(huì)員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請(qǐng)注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP