- Linux 交叉编译分享
Mr_-G
编程入门Linux底层软件开发linux运维服务器交叉编译嵌入式底层软件
一、交叉编译的基本概念与应用场景1.1交叉编译的定义交叉编译是指在一个操作系统平台上编译出能在另一个不同架构或操作系统平台上运行的程序的过程。通俗地说,就是"在A机器上编译出能在B机器上运行的程序",其中A和B的硬件架构、操作系统可能完全不同。在传统的本地编译中,编译环境与运行环境是一致的,例如在x86_64的Linux系统上编译并运行程序。而交叉编译的核心特点在于编译环境与目标运行环境的分离,这
- Windows10-ltsc-2019 使用 PowerShell 安装安装TranslucentTB教程(不通过微软商店安装)
lkm0522
microsoftTranslucentTB透明任务栏
Windows10-ltsc-2019使用PowerShell安装安装TranslucentTB教程(不通过微软商店安装)下载v2020.4(最后一个兼容1809的版本):TranslucentTB安装包(下载不了上面有安装包)安装依赖项(如未安装):#下载并安装x86版本的VCLibsInvoke-WebRequest-Uri"https://aka.ms/Microsoft.VCLibs.x8
- gitlab修改DNS解析配置文件
中东大鹅
gitlablinuxgit
在Linux(CentOS7.9)云服务器上解压gitlab时提示需要Python的环境[root@rainyun-v1vct1josrc]#rpm-ivhgitlab-ce-10.8.4-ce.0.el7.x86_64.rpmwarning:gitlab-ce-10.8.4-ce.0.el7.x86_64.rpm:HeaderV4RSA/SHA1Signature,keyIDf27eab47:N
- 操作系统互斥全攻略:从屏蔽中断到TSL指令
ruan114514
操作系统嵌入式硬件单片机
屏蔽中断(DisablingInterrupts)核心概念:一种低级同步原语,主要用于单处理器(Uniprocessor/Single-CPU)系统。通过在执行临界区代码前暂时禁止CPU响应外部硬件中断,保证一小段代码(通常是操作关键内核数据结构)的原子性执行。工作原理:进入临界区前:执行特殊CPU指令(如CLI-ClearInterruptFlagonx86)关闭中断响应。执行临界区代码:CPU
- Ubuntu 系统安装 Docker 全流程指南
ANFUT
ubuntudockerlinux
一、环境准备1.系统要求-Ubuntu22.04LTS或24.04LTS(兼容性最佳)-内核版本≥5.15(验证命令:`uname-r`)-64位架构(验证命令:`arch`输出应为`x86_64`)2.卸载旧版本sudoaptremovedockerdocker-enginedocker.iocontainerdruncsudorm-rf/var/lib/docker二、核心安装步骤3.配置仓库
- GitLab安装
重生之苦练代码养女友
gitlab
环境说明(内存在4G以上)系统版本CentOS7.2x86_64软件版本gitlab-ce-10.8.4GitLab是一个用于仓库管理系统的开源项目,使用Git作为代码管理工具,并在此基础上搭建起来的web服务。可通过Web界面进行访问公开的或者私人项目。它拥有与Github类似的功能,能够浏览源代码,管理缺陷和注释。可以管理团队对仓库的访问,它非常易于浏览提交过的版本并提供一个文件历史库。团队成
- Linux 内存管理(六)之内存管理区
目录前言一、x86上的内存区域划分二、管理区结构1、structzone2、ZONE_PADDING三、高端内存1、高端内存的由来2、高端内存的访问3、高端内存的划分总结前言为了支持NUMA模型,也即CPU对不同内存单元的访问时间可能不同,此时系统的物理内存被划分为几个节点,一个节点对应一个内存簇bank,即每个内存簇被认为是一个节点。接着各个节点又被划分为内存管理区域,接下来将对内存管理区域进行
- jmeter 添加web_Jmeter 创建一个web测试计划
Jmeter创建一个web测试计划by:授客QQ:10335531221.下载Jmeter下载后解压到你想“安装”的路径下,比如:D:\ProgramFiles(x86)\Jemter\apache-jmeter-2.112.配置环境变量新建JMETER_HOME系统环境变量,值设置为Jmeter所在的路径,D:\ProgramFiles(x86)\Jemter\apache-jmeter-2.1
- Python网络爬虫实现selenium对百度识图二次开发以及批量保存Excel
WeiJingYu.
python爬虫selenium
一.百度识图自动上传图片fromseleniumimportwebdriverfromselenium.webdriver.edge.optionsimportOptionsfromselenium.webdriver.common.byimportByedge_options=Options()edge_options.binary_location=r"C:\ProgramFiles(x86)
- LNMP的安装记录
Jay_MIng
linuxphp运维nginxmysql
Linux可以使用虚拟机挂载使用Centos、Debian、Ubunto等的一些镜像,有条件的话可以使用阿里云的系统,本文使用的就是阿里云的x86_64x86_64x86_64GNU/Linux系统,虚拟机安装不做详解,可以自行搜索,或者有疑问可以提出一起探讨安装PHP1、下载解压wgethttp://cn2.php.net/distributions/php-7.2.8.tar.gztar-xz
- Filebeat + Logstash + ES进行Nginx日志采集
一个只会喊666的菜比
简易架构图service.png架构图比较简单,日志收集大同小异,这次不添加任何中间服务比如:rediskafka后端只是存储进ES使用的版本jdk-8u161-linux-x64.rpmelasticsearch-6.7.2.rpmlogstash-6.7.2.rpmfilebeat-6.7.2-x86_64.rpm安装比较简单,只用进行rpm-ivh即可,接下来直接贴配置文件:Elastics
- [Windows] 开源变速器 OpenSpeedy v1.7.0
辣香牛肉面
工具类开源变速器
简单介绍OpenSpeedy是一款开源免费的游戏变速工具(对某些网盘或者其他的一些下载也可进行加速),让你的游戏突破帧率限制,提供更流畅丝滑的游戏加速体验。1、完全免费且开源2、简单易用的界面3、可自定义变速倍率4、对多种游戏引擎兼容性良好5、低系统资源占用6、同时可以加速x86和x64平台进程7、无内核侵入性,Ring3层Hook,不破坏系统内核操作系统要求OS:Windows10以上平台:x8
- 19c补丁-20250715发布的19.28补丁的校验码
bestsun999
Oracle_19coracle数据库linux
Patch6880880:OPatch12.2.0.1.47forDB19.0.0.0.0(Jul2025)OPatch12.2.0.1.47forDB19.0.0.0.0(Jul2025)(Patch)p6880880_190000_Linux-x86-64.zip69.5MB(72847006bytes)SHA-10F709DB263D031393086EC55F6D5270A73DE509D
- CAS中的ABA问题
一、什么是CAS?CAS(compareandset)操作是多线程环境处理并发的原子操作,更新一个值前先比较,如果与预期值一样则更新,否则失败。CAS底层是通过汇编层面的原语调用cpu指令实现的,同时结合了内存屏障,具体依赖CPU的指令,如cmpxchg指令(X86架构)二、什么是ABA问题?现有线程t1和线程t2,共享变量str="A"①首先读取str,那么t1中缓存值为A,t2中缓存值也为A,
- centos7安装 mysql5.7(安装包)
heiPony
linuxmysqlmariadbcentosmysql
一.卸载centos7自带数据库查看系统自带的Mariadbrpm-qa|grepmariadbmariadb-libs-5.5.44-2.el7.centos.x86_64卸载rpm-e--nodepsmariadb-libs-5.5.44-2.el7.centos.x86_64删除etc目录下的my.cnfrm/etc/my.cnf二.检查mysql是否存在(有就卸载,删除相关文件)rpm-q
- 信创海光x86服务器,定义、特点及应用详解
信创海光x86服务器是中国近年来在信息技术领域努力实现自主可控的成果之一,旨在打破国外技术封锁和限制,这类服务器的核心特点基于x86架构,这是一种广泛应用于全球的微处理器架构,由英特尔公司最初设计,海光作为国产处理器的代表之一,其技术基础来源于AMDZen的授权,主要面向服务器市场。服务器核心:海光C863350处理器海光C863350处理器是一款基于x86架构的高性能CPU,具体参数包括8核心1
- android studio调用python_Android Studio调用python运行thensorflow模型--CLE方案实现
孔良
androidstudio调用python
AndroidStudio调用python运行thensorflow模型--CLE方案实现AndroidStudio调用python运行thensorflow模型--CLE方案实现我使用的是虚拟android设备,故对应的CLE中库文件版本为/x86,你可以根据自己开发环境找到对应的版本。调用的python版本为3.7,以下为主要步骤:1、环境准备在官网下载最新的CLEforAndroid开发包,
- 银河麒麟V10离线安装Docker
checkQQ
安装部署记录Devops工具使用Liunx运维工具docker容器运维
场景:内网环境,无法连接公网,需要在麒麟系统部署一个docker环境运行容器。一、准备docker离线安装包:Indexoflinux/static/stable/x86_64/https://download.docker.com/linux/static/stable/x86_64/选择合适的版本,这里个人选择的20.10.14二、上传压缩包到服务器后进行解压tar--strip-compon
- ARM 和 x86_64是什么关系
riverz1227
linux
什么是ARM和x86_64?它们都是CPU指令集架构(ISA)指令集架构(InstructionSetArchitecture)就是:CPU能够理解和执行的“语言”和“命令格式”。类比解释:指令集就像“语言”类比对象ARMCPUx86_64CPU(Intel/AMD)语言西班牙语英语编译器翻译成西班牙语的代码翻译成英语的代码执行者会西班牙语的CPU会英语的CPUARM架构是一种低功耗、高能效的CP
- mysql一键安装脚本
青靴
shell脚本mysqladb数据库
#!/bin/bash##解决软件的依赖关系并且安装需要工具yuminstallcmakencurses-develgccgcc-c++vimlsofbzip2openssl-develncurses-compat-libsnet-tools-y##解压mysql二进制安装包(注意:请确保你已下载mysql-8.0.xx-linux-glibc2.12-x86_64.tar.gz并放在当前目录)t
- ubuntu x86、arm换源(jetson nano和nanoPC等arm芯片的换源)
tanunat
ubunturosubuntuarm
关键词:ubuntuarm换源NanoPC-T4出现的问题安装ROSmelodic时出现"Thefollowingpackageshaveunmetdependencies:ros-melodic-desktop-full:…"以及出现及缺少依赖报错修复Thefollowingpackageshaveunmetdependencies:ros-melodic-desktop-full:Depend
- Linux系统安装微信
用什么都重名
工作相关linux服务器微信
在Linux系统中安装微信。目录一、下载安装一、下载安装sudodpkg-iWeChatLinux_x86_64.deb安装完成之后在应用程序管理界面就会有一个微信图标,即可登录使用了。
- 【亲测免费】 如何构建适用于Android的Node.js:从零到实践
陈宜旎Dean
如何构建适用于Android的Node.js:从零到实践build-nodejs-for-androidBuildnodejsforandroid(arm,arm64,x86,x64,mipsel)perfectlyandprovideprebuiltbinaries,andadockerimageasworkbench.项目地址:https://gitcode.com/gh_mirrors/bu
- x86架构CPU市场格局
InnoLink_1024
芯片架构硬件架构
x86架构的CPU市场是全球处理器市场的核心,涵盖PC(桌面端与移动端)、服务器和超算等领域,主要玩家为英特尔(Intel)和AMD。以下基于最新数据分析市场格局及各领域份额,辅以国产厂商动态。1.总体市场概况x86架构因其成熟的生态系统和强大的兼容性,在PC和服务器市场占据主导地位。根据2024年数据,x86架构在服务器CPU市场占约91%的份额,而ARM等其他架构(如华为鲲鹏、飞腾)占约8%,
- GlobalFoundries收购MIPS的背景以及意义
InnoLink_1024
芯片人工智能硬件架构人工智能架构
背景MIPS的历史与现状:MIPS的起源:MIPS(MicroprocessorwithoutInterlockedPipelineStages)是一种基于精简指令集(RISC)的指令集架构(ISA),由MIPS计算机系统公司(现为MIPSTechnologies)于1985年开发。MIPS曾是全球三大芯片架构之一(与ARM和x86齐名),广泛应用于嵌入式系统、网络设备、游戏机(如PlayStat
- windows下tokenizers-cpp编译
Wite_Chen
windowstokenizers-cpp
github地址一、rust环境配置参考二、编译1、修改cmakelists.txt,支持x86和64编译(tokenizers_c库,原始版本windows下只支持64位)修改顶层CMakeLists.txt文件(77行),支持x86编译elseif(CMAKE_SYSTEM_NAMESTREQUAL"Windows")#set(TOKENIZERS_CPP_CARGO_TARGETx86_64
- linux 安装docker并部署Dify
Samale、随风
linuxdocker运维
环境:腾讯云Centos9Stream1.安装dockeryuminstalldocker#yuminstalldocker失败Error:Errordownloadingpackages:netavark-2:1.15.1-1.el9.x86_64:Cannotdownload,allmirrorswerealreadytriedwithoutsuccess#UpdateandCleanYumC
- 鲲鹏+银河麒麟v10离线安装docker
寻找软件源据说银河麒麟基于CentOS7,但是通过测试最终添加CentOS8的源才可以用,因为他喵的CentOS7只有x86_64,而CentOS8才有aarch64,厂商的话都信不得哦。手动配置了CentOS8的源后,yummakecache可以正常缓存,但是yum-yupdate会出现多个依赖错误问题,通过yum-yinstall可以安装软件,但是依赖问题依然很难受。最终在配置好CentOS8
- 国产(以麒麟为例)环境,离线安装docker、docker-compose、milvus
般若-波罗蜜
1024程序员节dockerpython深度学习pytorch
文章目录一、专有名词解释1.主流cpu2.操作系统二、安装docker2.读入数据总结docker错误解决方法一、专有名词解释1.主流cpu架构(指令集)x86(早期intel开发的32位指令集)x64(CISC)1)AMD64--------AMD首先开发出64位指令集,向下兼容32位2)x86_64--------intel使用AMD的64位指令集,换了个名字而已ARMAArch64为ARMv
- ffmpeg下编译tsan
泰勒朗斯
FFmpegffmpeg
如何在ffmpeg下编译tsan,如下配置:./configure\--prefix=/workspace/ffmpeg_gcu\--disable-stripping\--disable-optimizations\--disable-x86asm\--toolchain=gcc-tsan\--enable-pic\--enable-swscale\--enable-static\--enabl
- 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 的值!
精诚所至,金石为开