《Programming from the Ground Up》阅读笔记:p117-p146

《Programming from the Ground Up》学习第8天,p117-p146总结,总计30页。

一、技术总结

1.共享函数用法示例

(1)不使用共享函数

linux.s:

# filename:linux.s

# system call numbers(按数字大小排列,方便查看)
.equ SYS_READ, 0
.equ SYS_WRITE, 1
.equ SYS_OPEN, 2
.equ SYS_CLOSE, 3
.equ SYS_EXIT, 60

# standard file descriptors
.equ STDIN, 0
.equ STDOUT, 1
.equ STDERR, 2

# common status codes
.equ END_OF_FILE, 0

helloworld-nolib.s:

#filename: helloworld-nolib.s
# 编译命令:
 # as helloworld-nolib.s -o helloworld-nolib.o
 # ld helloworld-nolib.o -o helloworld-lib
.include "linux.s"

.section .data
helloworld:
    .ascii "hello world\n"
helloworld_end:
    #helloworld_end - helloworld的意思:
    .equ helloworld_len, helloworld_end - helloworld
.section .text
    .global _start

_start:
    #write涉及到SYS_WRITE,
    movq  $SYS_WRITE, %rax
    movq  $STDOUT, %rdi
    movq  $helloworld, %rsi
    movq  $helloworld_len, %rdx
    syscall
    
    # 退出函数: exit()
    movq  $SYS_EXIT, %rax
    movq  $0, %rdi
    syscall

执行helloworld-nolib结果:

# ./helloworld-nolib
hello world

(2)使用共享函数:print、exit

helloworld-lib.s:

# filename: helloworld-lib.s
# 编译命令:
 # as helloworld-lib.s -o helloworld-lib.o
 # ld -dynamic-linker /lib64/ld-linux-x86-64.so.2 -o helloworld-lib helloworld-lib.o -lc
.section .data
helloworld:
    .ascii "hello world\n\0"

.section .text
    .globl _start
    
_start:
    movq $helloworld, %rdi
    call printf # C语言中的printf
    movq $0, %rdi
    call  exit # C语言中的exit

执行helloworld-lib结果:

# ./helloworld-nolib
hello world

2.问题:-bash: ./helloworld-lib: No such file or directory

  • 问题描述

    root@LAPTOP-5PGRQ2IO:/mnt/d/Projects/AssemblyProjects# ld -dynamic-linker /lib/ld-linux.so.2 -o helloworld-lib helloworld-lib.o -lc
    root@LAPTOP-5PGRQ2IO:/mnt/d/Projects/AssemblyProjects# ll
    total 96
    drwxrwxrwx 1 root root  4096 Sep 28 15:48 ./
    drwxrwxrwx 1 root root  4096 Jun 24 07:23 ../
    -rwxrwxrwx 1 root root   147 Aug 25 16:18 add-year.s*
    -rwxrwxrwx 1 root root  1075 Aug 31 18:55 count-chars.s*
    -rwxrwxrwx 1 root root   112 Aug 25 16:26 error-exit.s*
    -rwxrwxrwx 1 root root   863 Jul  1 23:39 exit.s*
    -rwxrwxrwx 1 root root 14048 Sep 28 15:48 helloworld-lib*
    -rwxrwxrwx 1 root root   920 Sep 28 15:47 helloworld-lib.o*
    -rwxrwxrwx 1 root root   224 Sep  2 08:43 helloworld-lib.s*
    -rwxrwxrwx 1 root root  9224 Sep 28 15:44 helloworld-nolib*
    -rwxrwxrwx 1 root root  1208 Sep  2 08:39 helloworld-nolib.o*
    -rwxrwxrwx 1 root root   510 Sep  2 08:39 helloworld-nolib.s*
    -rwxrwxrwx 1 root root   264 Aug 24 17:52 linux.s*
    -rwxrwxrwx 1 root root   774 Jul  3 06:25 maximum.s*
    drwxrwxrwx 1 root root  4096 Aug 25 16:20 pgu_64-master/
    -rwxrwxrwx 1 root root  2318 Jul 16 07:52 power.s*
    -rwxrwxrwx 1 root root   453 Aug 24 18:14 read-record.s*
    -rwxrwxrwx 1 root root  1333 Aug 24 18:15 read-records.s*
    -rwxrwxrwx 1 root root   117 Aug 23 08:23 record-def.s*
    -rwxrwxrwx 1 root root   984 Aug 24 17:58 test.dat*
    -rwxrwxrwx 1 root root  5612 Jul 27 11:47 toupper.s*
    -rwxrwxrwx 1 root root  1128 Aug 24 17:57 write-record.o*
    -rwxrwxrwx 1 root root   686 Aug 24 17:54 write-record.s*
    -rwxrwxrwx 1 root root 10816 Aug 24 17:58 write-records*
    -rwxrwxrwx 1 root root  2632 Aug 24 17:57 write-records.o*
    -rwxrwxrwx 1 root root  2081 Aug 24 17:57 write-records.s*
    root@LAPTOP-5PGRQ2IO:/mnt/d/Projects/AssemblyProjects# ./helloworld-lib
    -bash: ./helloworld-lib: No such file or directory
    

    在执行 ./helloworld-lib 命令时提示 -bash: ./helloworld-lib: No such file or directory,但 helloworld-lib 实际上是存在的。

  • 原因分析

    /lib/ld-linux.so.2用于32位可执行文件,本人的系统是64位的WSL Ubuntu22.04,查看该文件是否存在:

    # ls /lib/ld-linux.so.2
    ls: cannot access '/lib/ld-linux.so.2': No such file or directory
    

    执行 ls /lib/ld-linux.so.2 命令可以发现系统中没有 /lib/ld-linux.so.2 这个文件,所以虽然执行ld命令时没有报错,但是执行 ./helloworld-lib 命令时报错了:-bash: ./helloworld-lib: No such file or directory。

  • 解决方法

    因为电脑是 64 位的,所以使用 /lib64/ld-linux-x86-64.so.2 而不是 /lib/ld-linux.so.2:

    ld -dynamic-linker /lib64/ld-linux-x86-64.so.2 -o helloworld-lib helloworld-lib.o -lc
    

二、英语总结

1.majorly

p129, Code that is copied often has to be majorly modified to fit the surrounding code.在这里,majorly既可以指“量”也可以指“质”上的巨大修改。

三、其它

上一次阅读还是2024/8/24,期间因为工作上一些不愉快的事一直没有抽离出来,今天算是慢慢调整过来了,继续干。

四、参考资料

1. 编程

(1)Jonathan Bartlett,《Programming From The Ground Up》:https://book.douban.com/subject/1787855/

2. 英语

(1)Etymology Dictionary:https://www.etymonline.com

(2) Cambridge Dictionary:https://dictionary.cambridge.org

欢迎搜索及关注:编程人(a_codists)

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,607评论 6 507
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,239评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,960评论 0 355
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,750评论 1 294
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,764评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,604评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,347评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,253评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,702评论 1 315
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,893评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,015评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,734评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,352评论 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,934评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,052评论 1 270
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,216评论 3 371
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,969评论 2 355

推荐阅读更多精彩内容