- 1.计算机处理器架构+嵌入式处理器架构及知识
vv 啊
arm-linux学习linux系统架构
目录一:x86-64处理器架构二:Intel80386处理器(i386)1.i3862.i686三:嵌入式Linux知识:1.MinGW2.GNU计划2.1GNU工具链概述此次只分享英特尔和ADM处理器有关于x86的架构,至于嵌入式处理器架构请查看https://en.wikipedia.org/wiki/List_of_ARM_processors一:x86-64处理器架构x86-64,也称为x
- centos7中的MySQL安装
老伙子53
mysql数据库
centos7中的MySQL安装一、MySQL5.7.17安装脚本#!/bin/bashcd/rootmkdirmysql_tarwgethttps://downloads.mysql.com/archives/get/p/23/file/mysql-community-server-5.7.17-1.el7.x86_64.rpmwgethttps://downloads.mysql.com/ar
- RockyLinux8 & RockyLinux9安装postgresql16-devel开发包
ynzhangyao
postgresql
1、PG的插件扩展有些需要自行编译,需要安装PG开发包2、RockyLinux8安装#创建用户先useraddpostgressudodnfinstall-yhttps://download.postgresql.org/pub/repos/yum/reporpms/EL-8-x86_64/pgdg-redhat-repo-latest.noarch.rpmsudodnf-qymoduledisa
- Centos 7 yum安装php5.6.X
DomyloveR
检查当前安装的PHP包yumlistinstalled|grepphp如果有安装的PHP包,先删除他们yumremovephp.x86_64php-cli.x86_64php-common.x86_64php-gd.x86_64php-ldap.x86_64php-mbstring.x86_64php-mcrypt.x86_64php-mysql.x86_64php-pdo.x86_64配置yum
- 利用K8S Statefulset搭建Etcd集群 - 本地存储
夜晓码农
大数据Dockerkubernetesetcd容器
目录概述测试环境yaml配置service.yamlcluster.yamlQ&A参考链接概述公司因项目需要使用K8S部署ETCD集群供其他业务调用,网上搜索了解了下,一般K8S搭建ETCD集群大部分都是使用EtcdOperator来搭建。但是公司的项目运行在离线ARM架构平台,直接使用网上EtcdOperator代码,他们提供的镜像都是x86_64架构,经过Opeartor编译等尝试,最后都以失
- x86 32bits c && asm helloworld
dddddppppp123
linux运维服务器
helloworld:helloworld.omain.ogcc-m32-no-piehelloworld.omain.o-ohelloworld#ld-melf_i386-s-ohelloworldhelloworld.omain.ohelloworld.o:helloworld.asm#nasm-felf64-ohelloworld.ohelloworld.asmnasm-felf32-ohe
- centos7安装Rstudio
Vin0sen
环境搭建linux运维服务器
RStudio分为Desktop和Server,服务器版通过Web界面进行操作,与桌面客户端体验一致#installR#yuminstallepel-release#可能需要安装并启用EPELyuminstall-yR#installR-studiowgethttps://download2.rstudio.org/server/centos7/x86_64/rstudio-server-rhel
- 构建jdk1.8+ffmpeg镜像
wcy10086
ffmpegdockerjdk
FROMharbor.**.cn/library/jdk1.8:v2.0MAINTAINERwcyRUNyuminstall-yepel-releaseRUNrpm--importhttp://li.nux.ro/download/nux/RPM-GPG-KEY-nux.roRUNrpm-Uvhhttp://li.nux.ro/download/nux/dextop/el7/x86_64/nux-
- 在Ubuntu-12.04环境下使用新的Rust开发工具
塵觴葉
ubunturustlinux
在老旧的系统环境下使用Rust开发工具笔者的一台硬件资源紧张的旧电脑安装了Ubuntu-12.04,希望在其上运行比较新的Rust开发工具,但却发现其因glibc较老,不能正常运行cargo工具,结果如下:yejq@UNIX:~$uname-aLinuxUNIX3.13.0-32-generic#57~precise1-UbuntuSMPTueJul1503:51:20UTC2014x86_64x
- 服务器硬件基础知识
love6a6
服务器
服务器硬件是支持服务器运行的基础设施,它与普通的个人电脑硬件有所不同,主要表现在以下几个方面:一、中央处理器(CPU):服务器CPU往往支持多线程和多核心,以满足同时处理多个请求的需要。服务器CPU的类型多种多样,它们根据性能、核心数量、线程数量、功耗和价格等因素进行分类。以下是一些常见的服务器CPU类型:x86架构:这是目前最常见的服务器CPU架构,由英特尔和AMD公司生产。支持32位和64位运
- ubuntu20.04下安装anaconda+配置环境变量+运行+创建快捷方式
Terry Cao 漕河泾
ubuntulinux
原来是在windows下用matlab进行数据处理与算法验证,在ubuntu下进行C++部署应用,需要不断的重启切换双系统,太麻烦,打算在ubuntu下用python进行数据处理与算法验证。安装anaconda如下1.官网下载anacondaFreeDownload|Anaconda2.安装,在文件夹下打开命令窗口,输入bashAnaconda3-2022.10-Linux-x86_64.sh具体
- mac电脑启动项目报错 wasm code commit Allocation failed - process out of memory
_揽
前端学习笔记macoswasmlinux
目录解决办法问题扩展问题1:nvm无法uninstall卸载当前版本的node1.停用当前使用的node版本2.继续执行卸载问题2:如果执行arch-x86_64zsh后丢失了nvm命令解决办法在运行某个开发程序的时候,安装依赖$npminstall报错:wasmcodecommitAllocationfailed-processoutofmemory解决方式$nvmuninstall14$arc
- bugly升级配置
微尘_8957
build.gradle配置dependencies{//注释掉原有bugly的仓库implementation'com.tencent.bugly:crashreport_upgrade:1.2.4'}android{defaultConfig{ndk{//设置支持的SO库架构abiFilters'armeabi','x86','armeabi-v7a','x86_64','arm64-v8a'
- 解决Android Studio无法打开模拟器
坚果_
androidstudio
打开【任务管理器】,找到【详细信息】,结束qemu-system-x86_64进程,进入报错时指定的路径,删除.lock后缀文件,启动即可
- Mysql运维篇(六) 部署MHA--一主二从部署
董乐,快乐的乐!
运维
一路走来,所有遇到的人,帮助过我的、伤害过我的都是朋友,没有一个是敌人。如有侵权,请留言,我及时删除!MAH架构图一、上传MySQL软件1、同步MySQL软件[root@mysql01~]#ls-lrttotal626112-rw-r--r--.1rootroot641127384Jan3015:13mysql-5.7.20-linux-glibc2.12-x86_64.tar.gz-rw----
- 运维随录实战(14)之docker搭建mysql主从集群(Replication))
Loren_云淡风轻
运维运维dockermysql
1,从官方景镜像中拉取mysql镜像:dockerpullmysql:8.0.24--platformlinux/x86_642,创建master和slave容器:在创建之前先设置网段dockernetworkcreate--subnet=172.20.0.0/24soil_networkmaster:dockerrun-d-p3306:3306--namemysql-master--netsoi
- CentOs虚拟机下openGauss的配置使用
renxyz
centoslinux运维openGauss
CentOs虚拟机下opengauss的配置使用环境说明虚拟机平台VMware服务器端CentOS7.9本机系统Windows10部署版本OpenGauss1.1.0安装详细步骤虚拟机VMware本机已配置,该部分省略CentOS7.9安装下载镜像源CentOS-7-x86_64-DVD-2009.iso虚拟机中选中镜像进行安装设置内存设置为2GB处理器设置为2网络默认即可声卡和打印机不使用直接进
- Qt 通过pdfium将网络上的pdf显示为图片
阿达和自己
C++Qtqtpdf开发语言
前言遇到个需求,就是在qt客户端显示服务器上的pdf文档,文档以base64格式返回给客户端。以下是实现方法:1、在pro文件增加以下代码:INCLUDEPATH+=$$PWD/PDFiumSDK/include/publicDEPENDPATH+=$$PWD/PDFiumSDK/include/publicLIBS+=-l$$PWD/PDFiumSDK/lib/x86/pdfium2、pdf转图
- Mac OS 安装 CGO 交叉编译环境 x86_64-linux-gnu-gcc
shida_csdn
疑难杂症linuxgnu运维
在MacOS平台编译kubelet遇到如下错误:#makeWHAT=cmd/kubeletKUBE_BUILD_PLATFORMS=linux/amd64+++[022214:39:32]Buildinggotargetsforlinux/amd64k8s.io/kubernetes/cmd/kubelet(non-static)#runtime/cgocgo:Ccompiler"x86_64-l
- windows环境下使用python解压大文件
锅炉房刘大爷
python3windows解压
这里遇见的是在windows环境下解压gz文件,遇见较大文件时,占用内存过大导致解压失败,这里推荐一个解决办法,调用WinRAR软件来解压压缩文件defcompress_with_winrar(file_path,rar_path='"C:/ProgramFiles(x86)/WinRAR/WinRAR.exe"'):"""使用WinRAR解压文件:paramfile_path:压缩文件的绝对路径
- centOS7操作系统安装说明
山外有山a
linuxlinux
一、安装前准备在安装CentOS7之前,确保你已经下载了CentOS7的ISO镜像文件。你可以从CentOS官网下载:TheCentOSProject1.安装环境准备确保你的计算机满足CentOS7的最低系统要求。CentOS7支持的最低系统要求如下:x86-64或x86架构的处理器2GBRAM(推荐4GB或更多)至少15GB的可用硬盘空间支持VT-x或AMD-V的BIOS(对于虚拟化支持)2.安
- Arduino、arm、树莓派、单片机四者有什么不同?
枪哥玩转嵌入式
51单片机智能小车嵌入式单片机51单片机
Arduino、arm、树莓派、单片机四者有什么不同?在开始前我有一些资料,是我根据网友给的问题精心整理了一份「单片机的资料从专业入门到高级教程」,点个关注在评论区回复“888”之后私信回复“888”,全部无偿共享给大家!!!ARM指的是一种处理器架构,一种处理器核心,同时也是ARM公司的名字,也是ARM技术的名字。作为处理器架构与其相异的有X86PowerPC等,我们常见的一些手机芯片,和一些控
- x64 和 arm64 处理器架构的区别
cpu
在深入探讨x64和arm64这两个处理器架构之前,让我们先明确它们在计算机科学和硬件设计领域中的基本概念和重要性。理解这些概念对于掌握它们的区别至关重要,而且可以帮助我们认识到为什么现代计算设备,从服务器到智能手机,会选择这些架构。x64,也被称为AMD64或Intel64,是对经典的32位x86指令集架构(ISA)的扩展。这种架构最初由AMD开发,并迅速被Intel采纳,其主要目的是允许计算机处
- Linux 内核irq_stack遍历
Configure-Handler
Linux内核linux服务器栈
环境Centos4.18.0-80.el8.x86_64一、x86架构堆栈类型说明https://www.kernel.org/doc/Documentation/x86/kernel-stacksintget_stack_info(unsignedlong*stack,structtask_struct*task,structstack_info*info,unsignedlong*visit_
- openEuler离线安装docker
openeulerdocker
docker下载地址:https://download.docker.com/linux/static/stable/所有版本都有,根据你的需求去选择。我这里下载的docker版本号是20.10.23#wgethttps://download.docker.com/linux/static/stable/x86_64/docker-20.10.23.tgz#tarzxvfdocker-20.10.
- 嵌入式开发——linux系统怎么知道接了多少物理内存?
正在起飞的蜗牛
嵌入式开发中的总结linux
1、前言linux系统是不知道当前设备接了多少内存,需要bootloader在启动时告诉linux系统感知到当前设备接了多少物理内存有两种方式动态识别(X86架构大多是这种):可以插拔的内存条,bootloader能识别出内存条的容量代码里写死(ARM架构大多是这种):设备的内存是贴片上去的,不支持动态改变,内存的容量在代码里写死(系统工程师在适配程序时要根据实际物理内存容量去修改代码)2、lin
- MySQL的安装和备份
SUPER COW
mysql数据库
一、openEuler二进制方式安装MySQL8.0.x1、获取软件包[root@Localhost~]#wget-chttps://mirrors.aliyun.com/mysql/MySQL-8.0/mysql-8.0.28-linux-glibc2.12-x86_64.tar.xz2、创建用户和组[root@Localhost~]#groupadd-g27-rmysql[root@Local
- VS 2019报错:error LNK2019: 无法解析的外部符号 __vsnwprintf_s odbccp32.lib(dllload.obj)
Lulifer。
安装软件visualstudio
首先声明:1、不是缺少odbccp32.lib(dllload.obj),不用添加这个。解决:1、链接器里面的附加依赖项添加依赖:legacy_stdio_definitions.lib成功解决!适用于vs2019,debug里面的选x86平台。
- C++启动JVM
jvmc++javajni
功能介绍1.C++启动Java虚拟机2.通过C++指针调用main方法环境JDK:jdk-17.0.9mingw-w64:x86_64-8.1.0-release-win32-seh-rt_v6-rev0实现过程1.编写cpp程序StartJVM.cpp#include//JNIheaderprovidedbyJDK#include//CStandardIOHeader#includeintmai
- Centos7.4搭建环境,JDK1.8、Tomcat9、MySQL、FTP
llliuweijian
Yum安装MySQL和JDK是在线下载,文件大下得慢,本人懒得等,所有安装文件先下载好再通过FTP传输到服务器所有资源已上传到百度云,不知道允不允许分享百度云链接所以没有粘贴,需要的可评论[toc]环境版本简介Linux各类环境Linux:CentOS7.464位Java1.8:JDK-8u181-linux-x64.tar.gzMySql:mysql-8.0.12-1.el7.x86_64.rp
- jquery实现的jsonp掉java后台
知了ing
javajsonpjquery
什么是JSONP?
先说说JSONP是怎么产生的:
其实网上关于JSONP的讲解有很多,但却千篇一律,而且云里雾里,对于很多刚接触的人来讲理解起来有些困难,小可不才,试着用自己的方式来阐释一下这个问题,看看是否有帮助。
1、一个众所周知的问题,Ajax直接请求普通文件存在跨域无权限访问的问题,甭管你是静态页面、动态网页、web服务、WCF,只要是跨域请求,一律不准;
2、
- Struts2学习笔记
caoyong
struts2
SSH : Spring + Struts2 + Hibernate
三层架构(表示层,业务逻辑层,数据访问层) MVC模式 (Model View Controller)
分层原则:单向依赖,接口耦合
1、Struts2 = Struts + Webwork
2、搭建struts2开发环境
a>、到www.apac
- SpringMVC学习之后台往前台传值方法
满城风雨近重阳
springMVC
springMVC控制器往前台传值的方法有以下几种:
1.ModelAndView
通过往ModelAndView中存放viewName:目标地址和attribute参数来实现传参:
ModelAndView mv=new ModelAndView();
mv.setViewName="success
- WebService存在的必要性?
一炮送你回车库
webservice
做Java的经常在选择Webservice框架上徘徊很久,Axis Xfire Axis2 CXF ,他们只有一个功能,发布HTTP服务然后用XML做数据传输。
是的,他们就做了两个功能,发布一个http服务让客户端或者浏览器连接,接收xml参数并发送xml结果。
当在不同的平台间传输数据时,就需要一个都能解析的数据格式。
但是为什么要使用xml呢?不能使json或者其他通用数据
- js年份下拉框
3213213333332132
java web ee
<div id="divValue">test...</div>测试
//年份
<select id="year"></select>
<script type="text/javascript">
window.onload =
- 简单链式调用的实现技术
归来朝歌
方法调用链式反应编程思想
在编程中,我们可以经常遇到这样一种场景:一个实例不断调用它自身的方法,像一条链条一样进行调用
这样的调用你可能在Ajax中,在页面中添加标签:
$("<p>").append($("<span>").text(list[i].name)).appendTo("#result");
也可能在HQ
- JAVA调用.net 发布的webservice 接口
darkranger
webservice
/**
* @Title: callInvoke
* @Description: TODO(调用接口公共方法)
* @param @param url 地址
* @param @param method 方法
* @param @param pama 参数
* @param @return
* @param @throws BusinessException
- Javascript模糊查找 | 第一章 循环不能不重视。
aijuans
Way
最近受我的朋友委托用js+HTML做一个像手册一样的程序,里面要有可展开的大纲,模糊查找等功能。我这个人说实在的懒,本来是不愿意的,但想起了父亲以前教我要给朋友搞好关系,再加上这也可以巩固自己的js技术,于是就开始开发这个程序,没想到却出了点小问题,我做的查找只能绝对查找。具体的js代码如下:
function search(){
var arr=new Array("my
- 狼和羊,该怎么抉择
atongyeye
工作
狼和羊,该怎么抉择
在做一个链家的小项目,只有我和另外一个同事两个人负责,各负责一部分接口,我的接口写完,并全部测联调试通过。所以工作就剩下一下细枝末节的,工作就轻松很多。每天会帮另一个同事测试一些功能点,协助他完成一些业务型不强的工作。
今天早上到公司没多久,领导就在QQ上给我发信息,让我多协助同事测试,让我积极主动些,有点责任心等等,我听了这话,心里面立马凉半截,首先一个领导轻易说
- 读取android系统的联系人拨号
百合不是茶
androidsqlite数据库内容提供者系统服务的使用
联系人的姓名和号码是保存在不同的表中,不要一下子把号码查询来,我开始就是把姓名和电话同时查询出来的,导致系统非常的慢
关键代码:
1, 使用javabean操作存储读取到的数据
package com.example.bean;
/**
*
* @author Admini
- ORACLE自定义异常
bijian1013
数据库自定义异常
实例:
CREATE OR REPLACE PROCEDURE test_Exception
(
ParameterA IN varchar2,
ParameterB IN varchar2,
ErrorCode OUT varchar2 --返回值,错误编码
)
AS
/*以下是一些变量的定义*/
V1 NUMBER;
V2 nvarc
- 查看端号使用情况
征客丶
windows
一、查看端口
在windows命令行窗口下执行:
>netstat -aon|findstr "8080"
显示结果:
TCP 127.0.0.1:80 0.0.0.0:0 &
- 【Spark二十】运行Spark Streaming的NetworkWordCount实例
bit1129
wordcount
Spark Streaming简介
NetworkWordCount代码
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
- Struts2 与 SpringMVC的比较
BlueSkator
struts2spring mvc
1. 机制:spring mvc的入口是servlet,而struts2是filter,这样就导致了二者的机制不同。 2. 性能:spring会稍微比struts快。spring mvc是基于方法的设计,而sturts是基于类,每次发一次请求都会实例一个action,每个action都会被注入属性,而spring基于方法,粒度更细,但要小心把握像在servlet控制数据一样。spring
- Hibernate在更新时,是可以不用session的update方法的(转帖)
BreakingBad
Hibernateupdate
地址:http://blog.csdn.net/plpblue/article/details/9304459
public void synDevNameWithItil()
{Session session = null;Transaction tr = null;try{session = HibernateUtil.getSession();tr = session.beginTran
- 读《研磨设计模式》-代码笔记-观察者模式
bylijinnan
java设计模式
声明: 本文只为方便我个人查阅和理解,详细的分析以及源代码请移步 原作者的博客http://chjavach.iteye.com/
import java.util.ArrayList;
import java.util.List;
import java.util.Observable;
import java.util.Observer;
/**
* “观
- 重置MySQL密码
chenhbc
mysql重置密码忘记密码
如果你也像我这么健忘,把MySQL的密码搞忘记了,经过下面几个步骤就可以重置了(以Windows为例,Linux/Unix类似):
1、关闭MySQL服务
2、打开CMD,进入MySQL安装目录的bin目录下,以跳过权限检查的方式启动MySQL
mysqld --skip-grant-tables
3、新开一个CMD窗口,进入MySQL
mysql -uroot
 
- 再谈系统论,控制论和信息论
comsci
设计模式生物能源企业应用领域模型
再谈系统论,控制论和信息论
偶然看
- oracle moving window size与 AWR retention period关系
daizj
oracle
转自: http://tomszrp.itpub.net/post/11835/494147
晚上在做11gR1的一个awrrpt报告时,顺便想调整一下AWR snapshot的保留时间,结果遇到了ORA-13541这样的错误.下面是这个问题的发生和解决过程.
SQL> select * from v$version;
BANNER
-------------------
- Python版B树
dieslrae
python
话说以前的树都用java写的,最近发现python有点生疏了,于是用python写了个B树实现,B树在索引领域用得还是蛮多了,如果没记错mysql的默认索引好像就是B树...
首先是数据实体对象,很简单,只存放key,value
class Entity(object):
'''数据实体'''
def __init__(self,key,value)
- C语言冒泡排序
dcj3sjt126com
算法
代码示例:
# include <stdio.h>
//冒泡排序
void sort(int * a, int len)
{
int i, j, t;
for (i=0; i<len-1; i++)
{
for (j=0; j<len-1-i; j++)
{
if (a[j] > a[j+1]) // >表示升序
- 自定义导航栏样式
dcj3sjt126com
自定义
-(void)setupAppAppearance
{
[[UILabel appearance] setFont:[UIFont fontWithName:@"FZLTHK—GBK1-0" size:20]];
[UIButton appearance].titleLabel.font =[UIFont fontWithName:@"FZLTH
- 11.性能优化-优化-JVM参数总结
frank1234
jvm参数性能优化
1.堆
-Xms --初始堆大小
-Xmx --最大堆大小
-Xmn --新生代大小
-Xss --线程栈大小
-XX:PermSize --永久代初始大小
-XX:MaxPermSize --永久代最大值
-XX:SurvivorRatio --新生代和suvivor比例,默认为8
-XX:TargetSurvivorRatio --survivor可使用
- nginx日志分割 for linux
HarborChung
nginxlinux脚本
nginx日志分割 for linux 默认情况下,nginx是不分割访问日志的,久而久之,网站的日志文件将会越来越大,占用空间不说,如果有问题要查看网站的日志的话,庞大的文件也将很难打开,于是便有了下面的脚本 使用方法,先将以下脚本保存为 cutlog.sh,放在/root 目录下,然后给予此脚本执行的权限
复制代码代码如下:
chmo
- Spring4新特性——泛型限定式依赖注入
jinnianshilongnian
springspring4泛型式依赖注入
Spring4新特性——泛型限定式依赖注入
Spring4新特性——核心容器的其他改进
Spring4新特性——Web开发的增强
Spring4新特性——集成Bean Validation 1.1(JSR-349)到SpringMVC
Spring4新特性——Groovy Bean定义DSL
Spring4新特性——更好的Java泛型操作API
Spring4新
- centOS安装GCC和G++
liuxihope
centosgcc
Centos支持yum安装,安装软件一般格式为yum install .......,注意安装时要先成为root用户。
按照这个思路,我想安装过程如下:
安装gcc:yum install gcc
安装g++: yum install g++
实际操作过程发现,只能有gcc安装成功,而g++安装失败,提示g++ command not found。上网查了一下,正确安装应该
- 第13章 Ajax进阶(上)
onestopweb
Ajax
index.html
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/
- How to determine BusinessObjects service pack and fix pack
blueoxygen
BO
http://bukhantsov.org/2011/08/how-to-determine-businessobjects-service-pack-and-fix-pack/
The table below is helpful. Reference
BOE XI 3.x
12.0.0.
y BOE XI 3.0 12.0.
x.
y BO
- Oracle里的自增字段设置
tomcat_oracle
oracle
大家都知道吧,这很坑,尤其是用惯了mysql里的自增字段设置,结果oracle里面没有的。oh,no 我用的是12c版本的,它有一个新特性,可以这样设置自增序列,在创建表是,把id设置为自增序列
create table t
(
id number generated by default as identity (start with 1 increment b
- Spring Security(01)——初体验
yang_winnie
springSecurity
Spring Security(01)——初体验
博客分类: spring Security
Spring Security入门安全认证
首先我们为Spring Security专门建立一个Spring的配置文件,该文件就专门用来作为Spring Security的配置
ATT汇编代码实例
前面是汇编的 hello,world 程序。为什么借助于 c 的 puts 函数呢?那是因为只有借助于 c 标准库的可移植性达到汇编代码的——可移植性,因为 linux 和 windows 的更低一级的系统调用是不一样的。
程序实例 2 : 调用 c 的 printf 函数
程序解释:
(1) 函数的开场白(主要是两行,保存原来的 %ebp 和重新设定 %ebp) 就不多说了,结束语有两行:leave 和 ret 。 leave 实际上是开场白的“反操作”,具体的可以参看代码中的注释部分。
(2) c 的 printf 函数,在汇编中调用是 _printf 函数,如同例子 1 中的 _puts 而不是 puts 函数。
(3) 汇编中调用函数之前,需要将参数压入栈中,参数压入的顺序是从右到左。比如 printf("\d", 42); 调用先压入 42 再压入 "%d" 。
(4) 汇编中变量实际上都是标号 LABEL,$LABEL 取的是变量对应的地址,而 LABEL 则代表变量的值;$42 是常量 42 的写法;上面的汇编代码的两次 printf 调用输出结果是一样的。
c 中函数调用的一些细节
(1) 虽然标准 c 中没有说明函数调用时候参数求值的顺序(从左到右?),然而至少从 gas 中可以看到,参数是从右到左传递过去的;
(2) c 的被调用函数 callee 不负责存储参数,参数是调用者 caller 压入栈中的,参数的清理也是调用者 caller 的责任;
(3) 在汇编函数中, 8(%ebp) 是函数的从左到右数的第一个参数,12(%ebp) 是第二个参数。试问 4(%ebp) 是谁呢? 是 caller 的 %ebp 的值!也就是 %ebp 的旧值,caller 的 %ebp 的值!
精诚所至,金石为开