- 博客(78)
- 资源 (25)
- 收藏
- 关注
原创 性能优化(2.CPU上下文切换)
性能优化(2.CPU上下文切换)概述Linux 是一个多任务操作系统,它支持大于 CPU 数量的任务同时运行。实际上,这些任务并不是真的在同时运行,只是系统在很短的时间内,将 CPU 轮流分配给它们,造成多任务同时运行的错觉。每个任务运行前,CPU 都需要知道任务从哪里加载、从哪里开始运行,也就是说,需要系统事先帮每个任务设置好 CPU 寄存器和程序计数器。上下文CPU 寄存器,是 CPU 内置的容量小、但速度极快的内存。程序计数器,则是用来存储 CPU 正在执行的指令位置、或者即将执行的下一
2021-09-12 09:30:04 467 1
原创 性能优化(1. CPU分析工具)
性能优化(1. CPU分析工具)关于本系列性能优化的系列文章,主要的信息来源是:《性能之巅》(Brendan Gregg)以及《Linux性能优化实战》(倪朋飞)。本系列的计划是,前几部分讲述相关工具,后面讲述工具如何使用,在遇到问题的时候的一些分析套路。概述性能是对整个系统的研究,包括了所有的硬件组件和整个软件栈。性能优化是个系统工程,总是牵一发而动全身。它涉及了从程序设计、算法分析、编程语言,再到系统、存储、网络等各种底层基础设施的方方面面。每一个组件都有可能出问题,而且很有可能多个组件同时
2021-09-12 09:29:28 666
原创 潜在二义性
先说结论在语义层面,潜在的二义性,C++编译器不会报错。只有产生了实际的二义性,C++编译器才报错。编译器:VC6.0gcc version 4.8.4看一段代码:using namespace std;void testFunc(){ cout<<"testFunc void"<<endl; return;}void testFunc(int inputVar = 0){ cout<<"testFunc with default
2021-09-12 09:23:49 237
原创 编译原理—笔记
编译原理—笔记翻译程序(Translator Process)翻译程序,是指把某一种语言,翻译成另外一种语言。并不特定于高级语言到低级语言之间的转换,可以是高级语言之间,或者低级语言之间的转换。语言A -》翻译程序 -》语言B编译程序(Compiler Process)编译程序,是翻译程序的一个子集。编译程序把高级语言的源码作为输入,经过翻译,分析,处理优化之后,输出面向机器的语言。机器语言就是目标程序,由计算机执行。高级语言A -》编译程序 -》 机器语言B (编译过程存在中间语言)编译
2021-09-12 09:21:55 476
原创 通过汇编看参数调用与返回
通过汇编看参数调用与返回要查看汇编代码,有两个方法:看一段代码:代码编译/运行环境:后记猜想做个试验:要查看汇编代码,有两个方法:gcc -S main.c (只看到汇编码)gcc -g main.c; objdump -dS a.out (可以看到汇编码与源码)参考代码:https://blog.csdn.net/stephenjy/article/details/3978161?utm_medium=distribute.pc_relevant_t0.none-task-blog-BlogC
2021-09-11 20:29:01 982
原创 C语言--数组/结构体初始化
看一段代码:typedef struct{ char MerchantID[128]; char MobileToken[36]; }Test_Data;void testStructInit(){ Test_Data struData = {1}; int i; for (i = 0 ; i < sizeof(struData); i ++) { printf("%02x ", (char)*(((char *)&struData) + i));
2020-06-16 23:44:21 1080
原创 读书笔记《Debug Hacks --调试技术与工具》(4-GDB调试(三))
历史值print变量的时候,显示过的值会记录在内部的历史中。可以通过print $n 访问历史变量,比如下面的例子,p变量后,可以观察前面有 $1, 后续指令中,$1 就是指这个变量:(gdb) p arrToSearch$1 = {0, 0, 0, 0, 4195936, 0, 4195440, 0, -6960, 32767, 0}历史命令在一个会话中,使用的命令,可以保存起来,用于下一个gdb会话。以下指令为:设置指令历史扩展,保存历史文件,保存历史记录,设置命令历史数量:set
2020-06-15 23:36:38 305
原创 读书笔记《Debug Hacks --调试技术与工具》(3-GDB调试(二))
attach到进程对于已经在运行的程序,可以使用指令attach进行附着程序调试,格式 attach 程序运行后,查阅PID,然后gdb启动:[root@localhost gdbTest]# ps PID TTY TIME CMD 8194 pts/0 00:00:00 bash 9108 pts/0 00:00:00 su 9111 pts/0 00:00:00 bash 9208 pts/0 00:00:02 a.out 920
2020-06-15 00:18:08 225
原创 读书笔记《Debug Hacks --调试技术与工具》(2-GDB调试(一))
本文涉及的主要用法:设置/删除断点;显示栈调用;显示/设置变量值;生成coredump文件;查看内存地址。要调试的源码#include "stdio.h"static int binarySearch(int array[], int len, int key){ int left = 0; int right = len - 1; while (left <= right) { int mid = (left + right) / 2;
2020-06-11 22:32:41 394
原创 C语言--浮点数的比较
先说结论:浮点数不能直接用"=="进行比较观察代码看如下代码,分析输出:void testDoubleCompare(){ float a = (float)0.1; float b = (float)0.1; float c = (float)0.1; double d = (double)0.1; //同样精度,同样字面大小 if(a == b) printf("a==b\n"); else printf("a!=b\n"); //不同精度,同样字面大小
2020-06-11 22:21:53 5834
原创 读书笔记《Debug Hacks --调试技术与工具》(1-进程的内核转储)
读书笔记《Debug Hacks --调试技术与工具》(1-进程的内核转储)内核转储(core dump)可以保存问题发生时的状态。只要获取内核转储,即使没有复现的环境,也能够调试。启动内核转储shell指令(查看当前的内核转储功能是否有效):ulimit -c如果上例中的限制为0,则转储无效。需要做如下设置(不做限制,或者限制转储文件最大1G):ulimit -c unlimited或者ulimit -c 1073741824生成转储文件开启转储功能后,尝试生成转储文件,比如,运
2020-06-10 00:41:04 227
原创 读书笔记 《C Primer Plus》(5-关于const)
读书笔记 《C Primer Plus》(5-关于const)本篇只要讲述const关键字,该关键字可用于修饰变量,函数参数以及返回值。1、const修饰变量,使其成为常量:const int a = 99; //a为常量,编译前阶段完成替换int const a; //同上const int *p; //p指针指向int常量,指向的值不变int const *p; //同上,等价int * const p = &a; //p指针为常量指针,指向的变量不变const int * co
2020-06-08 21:54:18 153
原创 读书笔记 《C Primer Plus》(4-C语言与UNIX)
读书笔记 《C Primer Plus》(4-C语言与UNIX)此文章主要讲C语言的起源。参考:https://www.multicians.org/history.htmlhttps://web.mit.edu/multics-history/故事的开始在1964年,MIT开始了一个预研项目:Multics(Multiplexed Information and Computing Sercive,多路复用信息和计算服务)是大型分时操作系统。该项目有一个宏大的目标,希望可以开发出一个大型主
2020-06-07 23:11:24 241
原创 读书笔记 《C Primer Plus》(3-左值 与 右值)
读书笔记 《C Primer Plus》(3-左值 与 右值)术语:数据对象,左值,右值与操作数此处解析对于赋值操作符“=”的左边与右边对象的称谓,以及含义。数据对象(data object)泛指数据存储区,用于保存值。比如,用于保存变量或者数组的数据存储区是一个数据对象。左值(lvalue)指用于标识一个特定的数据对象的名字或者表达式。比如,变量的名字是一个左值。作为一个左值,一定能解析出对象的地址。因此,对象指的是实际的数据存储,而左值是用于识别或者定位那个存储的标识符。可修改的左值
2020-06-07 22:11:13 275
原创 读书笔记 《C Primer Plus》(2-指针数组-数组指针-指针函数-函数指针)
读书笔记 《C Primer Plus》(2-指针数组-数组指针-指针函数-函数指针)指针是C语言的灵魂,成也指针,败也指针。在指针的世界里,就有了一些比较拗口的概念:指针数组/数组指针/指针函数/函数指针,本文旨在说清楚这些概念。指针数组场景:在某些情况,有一系列的指针是相关联的,比如有很多常量字符串“AAA”,“BBB”"CCC"等,通过数组保存他们,可以写成:const char pStr[] = {"AAA", "BBB", "CCC"};我们在代码逻辑中,可以动态地选择不同的数组元
2020-06-07 12:53:15 205
原创 C语言 -- 变量临时性定义
C语言–临时性定义先看下面一段代码:file1.cint globalInt;int main(){ funcInFile2(); printf("main func[%d]\n", globalInt); return 0;}file2.cint globalInt;int funcInFile2(){ globalInt = 909; printf("here is funcInFile2\n"); return 0;}是否能编译、链接成功?执行效果如何?答
2020-06-02 21:32:10 1440
原创 读书笔记《Debug Hacks --调试技术与工具》(0-概述)
Debug是非常个性化的工作,但是有效的debug方法,解决问题的思路毫无疑问是建立在对系统,应用的理解上。程序从编码到运行,有语法/编译问题,以及运行的问题。本系列的读书笔记主要讨论运行过程中遇到问题,如何继续调试。从代码到完成,经历的阶段有:需求定义,设计,编码,测试,调试等。编码:对项目进行编译与构建,修改并消灭编译错误与构建错误;测试:发现bug,找出不符合预期的行为。有方法认为编写程序前先写测试程序,TDD,即测试驱动开发。调试:对于给定的输入,确定输出是否符合预期。调试的工具/方
2020-05-11 21:57:52 267
转载 Code::Blocks +mingw64 编译64位程序配置方法
转载:作者:c_C2233来源:CSDN原文:https://blog.csdn.net/c_C2233/article/details/77796782一、 准备工作&说明本人新手一个,最近在用code::blocks编程,用的C++,由于默认编译器是编译32位的,程序占用系统内存最大只能2g,便考虑编译成64位程序来增大可用内存。于是就上网找方...
2020-05-07 01:10:49 1815
原创 读书笔记 《C Primer Plus》(1-关键字)
读书笔记 《C Primer Plus》(1-关键字)我一直认为,能用好C语言提供的关键字,是把C语言使用好的第一步。下面提纲挈领地汇总一下C语言中的关键字,力求面面俱到。类型相关数据相关的关键字包括11个:字符:char(一个char就是一个byte,一般8位)整数:short,int,long,unsigned,signed.(short,int至少16位,long 至少32位,...
2020-05-07 01:07:51 304
原创 读书笔记 《C Primer Plus》(0-概述)
读书笔记 《C Primer Plus》(0-概述)前言使用C语言已经好多年了,在大学的时候开始使用C语言进行课程试验设计到现在已经超过十年。重新看C语言的书,是因为我在想:这么多年使用C语言后,重新系统地看语言的规则与用法,是否会有新的心得。因此这个系列的文章,不是事无巨细地记录C语言的方方面面,而是根据个人的经验,记录之前所忽略的,或者一直没有清晰认识的点。起源C语言的历史比我想象...
2020-04-16 22:55:45 275
原创 2020年度计划 - 本立道生
好久没有写Blog了,一停就是好几年。2019年本着重新出发的初心,看了一些书。重新理解了系统的设计,语言的规则等。按照去年定下来的书单,还剩下几本书没有完成,因此今年的计划将是把2019年定下的书单完成,而且加上一些实践活动,并记录下来。记录下来本身不是目的,目的是记录的过程,重新梳理一下理解。因为有些东西以为自己懂了,复述出来,可能发现其实有些地方没有懂。实际操作下来,可...
2020-04-15 23:02:36 347
转载 QPBOC与PayWave的异同别
最近做了Pay Wave开发,总结如下:共同点:主流程基本一致,都包含预处理,寻卡,应用选择,应用初始化,read record,脱机数据认证等。不同点:1、qVSDC增加了可支持发卡行脚本回写。QPBOC无该功能,非接方式回写脚本只能通过非接标准借贷记方式.2、预处理 增加量DRL(Reader Risk Parameters 是可以配置的(可选项),状态检查,金额是否为0,非接交...
2018-09-29 17:19:33 959 2
转载 Makefile编译时怎么打印出变量值
$(warning $(DVD_SERVICE)) // DVD_SerVICE是Makefile中的变量$(warning ST40_IMPORTS is $(ST40_IMPORTS)) 变量名,一定要加括号。不加的话,可以发现前面都无法输出变量的值。1、输出打印信息的方法是:$(warning xxxxx),$(error xxxxx)2、输出打印
2017-05-09 19:48:15 7053
原创 你好,再见;你好,幸会!
做PBOC/EMV的L2认证,有接近七年了。一直就在这个圈子里兜兜转转,有做过终端认证,有做过卡片认证。偶尔玩玩L3,玩玩PCI,玩玩工具开发,中间库开发。技术来来去去也就是Linux + C ,裸机C语言,PBOC一套,很记得第五本是卡片规范,第六本是PBOC交易流程,十二本是非接触规范,十三本是电子现金。以前有一段时间,乐于跟别人讲PBOC与QPBOC的区别,乐于讲接触式PBO
2017-04-26 00:07:28 2498 8
转载 PBOC2.0终端规范与EMV规范的区别
已经找不到原出处了,整理了一下,正文如下:PBOC2.0终端规范与EMV规范的区别 1. 应用选择PBOC规定目录(PSE)选择方法必须支持。EMV对目录选择方法可选2. 持卡人验证· PBOC规范不支持EMV中的脱机密文PIN验证。· PBOC规定“当IC卡读卡器和密码键盘分离时(即密码键盘外置),为了PIN安全,终端应该在
2016-07-14 11:29:29 3862
转载 WIN7下VC6.0无法使用打开文件功能(Unable to register this add-in because its DLLRegisterServer return an error)
原文地址:http://blog.csdn.net/makenothing/article/details/8677682话说自己遇到这个问题已经很久了,因为之前都是做的小项目,大不了自己重新新建文件,然后把无法导入的代码复制进去,但是最近接触项目较大,如果还是按照以前的老方法,估计我的有生之年是做不完了,于是乎在网上找了很多方法,大都是相互转载、拷贝,甚至自己没有实践过。很不负责
2016-06-08 14:41:00 1901
翻译 PCI OP WiFi 测试(二):PCI对OP的要求
PCI OP WiFi 测试(二):PCI对OP的要求每次看PCI的文档,都一头雾水,本来就很抽象,看英文就感觉更抽象。泛泛而谈的要求,看一次忘一次,只好翻译成中文,没事就看看,知道指导思想。如下,是翻译PCI的《Modular Derived Test Requirements》的OP部分,这样直接翻译不知道是不是有侵权的问题(⊙﹏⊙)b正文开始:DTR 模块3: 开
2016-04-11 09:47:36 1606 2
原创 PCI OP WiFi 测试(一):基本概念
近期在看Wi-Fi的PCI测试,总结一下一些基本的概念。下文有一部分是翻译了同事Chris Madden的文章。 一、介绍:Wi-Fi遵循的协议是 IEEE802.11,一般会兼容802.11b/g/n规范。 二、概要:Wi-Fi定义了以下三种安全配置:1. WEP (WiredEquivalent Privacy) 2. WPA (Wi-FiP
2016-03-10 14:56:58 1409 2
原创 VC6 && VS2010 环境变量
上一篇的文章提到,编译 OPENSSL 需要安装 VS2005 以上,因为用到 nmake, ml.exe, rc.exe等工具,都是VS系列带有的。那么就涉及到环境变量这个东西,因为要知道这些工具的位置。我电脑一直安装有VC6.0,经典而轻巧的IDE,我个人是情有独钟。但是,为了 OPENSSL,我就必须安装 VS2010,同时,我又并不想删除VC6.0。安装了 VS2010后,我发
2016-01-29 10:33:20 2370
原创 OPENSSL(一)关于OPENSSL的安装
如何安装 OPENSSL,网上可以搜索出很多教程,其实步骤不算复杂。正常来讲, 流程如下:1. 安装activePerl,因为OPENSSL源码需要用到perl指令。(http://www.activestate.com/activeperl/downloads)2. 下载openssl源码。(https://www.openssl.org/source/)3. 下载MASM,因为
2016-01-28 15:37:22 4848 2
原创 银联内核与pboc内核的区别(闪付流程)
本文主要讲述在闪付流程中,银联内核与PBOC内核的区别点。1. 应用选择过程中,银联内核要求PDOL不存在或没有9F66,需要继续进行下一个候选列表的选择。PBOC内核则要求终止交易。2. 银联内核增加 CDCVM 的逻辑处理,而PBOC并没有这个逻辑;3. 银联内核要求先通过9F27判断交易AC类型,如果没有9F27再判断 9F10, 并使用9F10的值对9F
2016-01-04 17:23:05 7639 2
原创 QPBOC联机查询:后台响应 作弊卡 问题分析和解决方法
今天测试的时候,应用层同事反应,使用QPBOC进行联机交易查询余额的时候,后台返回 “作弊卡”(响应码:34).开始寻找并定位问题,一开始没多想,因为有旁边其他的厂商可以顺利查询该卡的余额,只有我们的失败,因此直接看 8583 报文。对比其他正常查询的厂商的8583报文,细看几处不一致的地方。排除一些正常的不同点,比如:不可预知数,9F10的MAC,终端计数器,卡片交易计数器。其他还有
2015-09-08 17:10:01 2785 9
转载 linux下如何进入单人维护模式,忘记密码的解决方法
linux下如何进入单人维护模式先将系统重新开机,在读秒的时候按下任意键就会出现操作系统的选择画面,仔细看选单底下的说明, 按下『e』就能进入grub的编辑模式了。此時你看到的画面有点像底下这样:root (hd0,0)kernel /vmlinuz-2.6.18-128.el5 ro root=LABEL=/ rhgb quietinitrd /initrd-2.6.18-128
2015-06-18 16:16:35 6631 1
原创 ReadFile函数 WIN7 返回错误
年轻的时候,在WIN XP下写了个串口通讯工具,一直流畅运行,表现良好。后来把这套软件运行在win7下,ReadFile函数就出错了,getlasterror得到的错误码是 ERROR_IO_PENDING(997):重叠的IO操作。我擦,这是什么事情,各种搞不懂,至今也搞不懂,只是加入了以下逻辑,就可以在WIN7下完美 运行了。如果您看到这篇文章,也知道为什么XP下能正常运行
2015-01-23 12:28:58 4324 3
原创 QT界面多语言的实现
QT菜单多语言的实现 系统:Win764位企业版工具:QtCreator 3.0.1目的:菜单做成中英文切换 步骤和过程:1. 在PRO文件中加入语句:TRANSLATIONS+=cn.tsTRANSLATIONS是表明用于翻译的文件,翻译文件是*.ts。ts文件会把UI文件里面的字符串全部搜集起来。2. 使用IDE工具生成ts文件。
2014-12-18 11:12:05 6423 2
原创 JAVA card 应用开发(九)APDU脚本命令中MAC的校验
发卡行有主密钥。在发卡的时候,发卡行把主密钥根据卡号分散,卡片得到分散密钥。交易过程中,发卡行接收到包含卡号的交易数据,通过主密钥,根据卡号得到分散密钥,根据ATC和分散密钥,得到过程密钥,使用过程密钥加密数据,得到MAC。而卡片本身已经存储有分散密钥,在交易过程中,根据ATC和分散密钥,计算得到过程密钥,使用过程密钥校验MAC是否正确。
2014-09-09 15:42:21 4237
原创 JAVA card 应用开发(八)APDU中值得注意的符号位
今天在看《》的时候,看到这一段:Short data_length = (short)(apdu_buffer[ISO7816.OFFSET_LC]&0xFF); Java 编程语言中的整数数据是带符号的,即最高位决定它是正数还是负数。但是 Lc 域应被解释为无符号的值,因为具有负长度是无意义的。在上面的代码段中,Lc 字节是按位和常数 0xFF 相与的,以将有符号的字节转化为无符
2014-08-15 17:41:44 2441
原创 JAVA card 应用开发(七) JAVA 卡数据(永久数据/临时数据)
JAVA CARD 的存储器件:a. ROM: 永久保存程序和数据,虚拟机,API等;(Applets也可以放这里)b. RAM: 栈数据,临时对象;c. EEPROM: Applet的类,长生命周期的数据;(写操作比RAM慢1000倍)
2014-08-12 11:45:24 3825
原创 JAVA card 应用开发(六) 个人化数据的线路安全和数据安全
一、线路安全1. 概念:线路安全,就是对于数据不保密,但要保证数据的完整性和防止被篡改。2. 方法:在原有的数据基础上,加上8个字节的MAC。3. 过程: a. 在外部认证指令中,设定安全级别。如图1.
2014-07-30 11:58:08 2847
原创 终端角度看RSA
在金融交易里面,站在终端的角度来看,RSA算法主要用于在公钥解密,并恢复证书(发卡行公钥证书,IC卡公钥证书)。下面从三种不同的公钥,阐述在POS终端里,RSA算法在脱机数据认证过程中发挥的作用和使用过程。
2014-07-29 15:20:37 2098
filetool.exe
2016-06-08
PBOC L2 EMVCo_TTA_Contact_L2_ICS_v43c_231013
2014-01-19
ISO 9564 全部共四部分
2013-12-10
rework 中文版 pdf
2011-10-22
VC6.0显示行号和设置字体的工具
2010-11-19
brew入门(菜单,文本,html资源等)例子
2009-08-08
有关uione的文档,入门的和接口的说明
2009-07-24
c#编写的echo服务器和客户端的代码
2009-07-12
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人