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

news/2024/9/30 0:01:47

《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, %raxmovq  $STDOUT, %rdimovq  $helloworld, %rsimovq  $helloworld_len, %rdxsyscall# 退出函数: exit()movq  $SYS_EXIT, %raxmovq  $0, %rdisyscall

执行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, %rdicall printf # C语言中的printfmovq $0, %rdicall  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)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ryyt.cn/news/66368.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

《Python 基础篇》六:面向对象

Python 中的面向对象。Author: ACatSmiling Since: 2024-09-27什么是对象 对象:是内存中专门用来存储数据的一块区域。 对象中可以存放各种数据,比如:数字、布尔值、代码。 对象由三部分组成:对象的标识(id) 对象的类型(type) 对象的值(value)面向对象(oop) Python…

9.23课堂作业

我所选择的主题是安全教育。在校园内外,我们经常听到的、看到的一些不安全事故频繁发生。尽管在校园内,也会有无端横祸向我们飞来,血的教训让我们懂得,校园安全与师生密切相关,关系到学生能否健康成长,完成学业。关系到老师能否在个宁静安全的环境中教书育人。校园安全是…

streamlit

示例代码import streamlit as st import pandas as pd from pathlib import Path@st.cache_data def load_data_from_csv(file_path):return pd.read_csv(file_path)if __name__ == __main__:file_path = Path(__file__).parent.parent / resources / data.csvdata = load_data…

PlantSimulation的socket交互之TCP

PlantSimulation的socket交互之TCP1.python的socket TCP客户端建立 其实可以任选python或plantsimulation作为客户端,博主因研究需要,将python设为客户端。plant设为服务器。1 """2 Created on Sat December 14 21:00:00 20213 @author: Zhang Litong- Nanjin…

2024-2025-1 20241419《计算机基础与程序设计》第一周学习总结

课程 要求 目标:基于VirtualBox虚拟机安装Ubuntu 作业正文:基于VirtualBox虚拟机安装Ubuntu 教材学习内容总结 1.计算系统:由软件、硬件及其管理的数据组成的用于解决问题以及与其所处环境进行交互的一种动态实体。 2.计算系统的分层:计算系统的各个具体组成部分。 3.抽象:…

Rhino基础操作3 - 出图篇

Rhino建模后出一系列的图的操作:建模后做倒角、利用快照切换视图。 出图有:纯线稿、截面图、剖面图、模型的说明书类、模型渲染图。注:非结构建模专业,纯粹是用Rhino写实用新型专利,所以学了下Rhino的建模。不理解最简面、曲线阶数的影响等,请原谅。--本篇导航--圆角(假…

vscode中文乱码问题

vscode中文乱码解决方法 简单粗暴:文件——>首选项——>设置——>搜索设置——>encoding——>Files:Encoding ——> gbk 修改实现注:可在同文件夹下实现效果; 如果不是固定常用,方法二: 这个就在规定文本文件实现;

AirPods 4 All In One

AirPods 4 All In One AirPods 4 (支持主动降噪) 优点 有主动降噪功能 缺点 与 AirPods 2 对比,耳机柄变短了,不方便佩戴、取下AirPods 4 All In OneAirPods 4 (支持主动降噪)优点有主动降噪功能缺点与 AirPods 2 对比,耳机柄变短了,不方便佩戴、取下(捏不住)demos免费镌刻…