通过汇编一个简单的C程序,分析汇编代码,理解计算机如何工作
1.简单的c程序如下:
int g(int x)
{
return x + 1;
}
int f(int x)
{
return g(x);
}
int main(void)
{
return f(1) + 1;
}
通过命令 gcc -S -o main.s main.c -m32得到汇编代码,实验截图如下:
...
c/c++ 语言编译过程
(1)预编译主要处理宏和头文件,用实际值代替有#define 指令定义的符号以及读入有#include 指令包含的文件内容
(2)编译过程首先将程序汇编成汇编代码(.s 文件,linux下),然后进一步翻译成二进制文件(.o 文件),也就是目标代码
(3)链接过程是链接器会引入标准c/c++函数库中任何被该程序所用到的函数,而且它也可以搜索程序员个人的程序库,将其中需要使用的函数也链...
Linux ftrace 2.1、ftrace的使用
关于Ftrace的使用,最权威的解读就在”Documentation/trace”文件夹下,我们挑选其中最经典的几个文件来进行翻译,加上自己理解的解读。
参考原文:ftrace - Function Tracer
1、背景:
Ftrace本来设计作为一个内部的tracer提供给系统的开发者和设计者,帮助他们弄清kernel正在发生的行为。它能够调试分析延迟和性能问题。
Ftrace发展...
Linux ftrace 2.2、trace event的使用
参考原文:Event Tracing
1、Introduction:
Tracepoints用来创建event tracing框架,而不需要使用创建模块来注册probe函数。
不是所有的tracpoint都能够使用event tracing系统来跟踪。内核开发者必须提供代码定义信息怎么保存到tracing buffer、已经信息怎么打印出来。
2、 Using Event Trac...
Linux ftrace 2.3、kprobe event的使用
原始的trace event插桩是静态的:使用TRACE_EVENT()定义tracepoint,并且在代码中显式调用tracepoint。而kprobe机制可以实现在内核运行时动态的插桩,利用kprobe机制我们可以动态的插入trace event,实现和静态trace event同样的功能。
参考原文:Kprobe-based Event Tracing
1、Overview
这些e...
Linux ftrace 2.4、uprobe event的使用
uprobe是用户态的探针,它和kprobe是相对应的,kprobe是内核态的探针。uprobe需要制定用户态探针在执行文件中的位置,插入探针的原理和kprobe类似。
参考原文:Uprobe-tracer: Uprobe-based Event Tracing
1、Overview
uprobe event类似于kprobe event。在编译内核时配置CONFIG_UPROBE_EV...
Linux ftrace 1.2、trace event
Linux trace中,最基础的就是:function tracer和trace event。鉴于他们搭建的良好的框架(ringbuffer、tracefs),各种trace纷纷投奔而来。
tracer发展出了function、function_graph、irqsoff、preemptoff、wakeup等一系列tracer。
而event也发展出tracepoint、kprobe、upr...
Linux ftrace 1.3、tracer (function、function_graph、irq_off)
如trace event一章的描述,任何一种trace都离不开以下流程:
函数插桩。使用各种插桩方式把自己的trace函数插入到需要跟踪的probe point上;
input trace数据。在trace的probe函数被命中时,会存储数据到ringbuffer当中;这里还包括filter和trigger功能;
ouput trace数据。用户或者程序需要读出trace数据,根据需要输出ra...
Linux ftrace 1.4、kprobe event
从前面几章看:trace event使用静态tracepoint插桩,function tracer使用“bl _mcount”的插桩点来动态插桩。既然都是插桩,为什么我们不使用功能强大的kprobe机制?
kprobe event就是这样的产物。krpobe event和trace event的功能一样,但是因为它采用的是kprobe插桩机制,所以它不需要预留插桩位置,可以动态的在任何位置进行...
Linux ftrace 1.5、syscall event
1、函数插桩
1.1、”events/raw_syscalls/sys_enter”、”events/raw_syscalls/sys_exit” trace event的插桩
在系统调用的出口、入口路径上,系统布置了两个tracepoint格式的trace event。
el0_svc为用户态系统调用的入口,arch\arm64\kernel\entry.S:
/*
* EL0...
Linux ftrace(目录)
Ftrace从字面上理解=Function trace,但是发展到现在已经不仅仅是function trace而是一个大集合,鉴于其搭建的良好的框架(ringbuffer、tracefs…),各种trace纷纷投奔而来。现在大概分为两大类:tracer、event。
tracer。发展出了function tracer、function_graph tracer、irqsoff tracer、...
反序列化的时候报未找到程序集的错误
问题背景:
客户端为一个winform的exe程序,服务端为webservice。我想在winform按钮事件中调用webservice接口传对象到服务端。
我尝试了第一种方式直接在webservice中创建自定义类,写一个接口参数为自定义类的数组。在客户端添加web引用后可以看到webservice自动生成的代码,发现已经将自定义类都自动生成了,客户端可以直接拿到自定义类赋值以后直接调用we...
外部程序调用WebService,如何调试?如何进断点?
背景:
当我们将一个webservice程序编译好之后,将会在IIS上发布这个webservice。我们可以在网页中浏览这个webservice并可以点击一些方法,当方法的参数为基元类型(比如string,int,当参数为一个对象时就不是基元类型)时,网页上会提供一些输入框给我们输出参数,点击调用按钮,当我们在程序的该方法入口打了断点,这个时候就可以进入断点调试了。
问题:
上述我们的调试是...
webservice接口异步调用
webservice异步调用其实很简单,当客户端添加了webservice的引用之后会由系统自动生成一段代码,这段自动生成的代码中有同步方法和异步方法,还会提供一个异步完成后事件,以便在异步结束后做相关处理。贴一段代码截图就知道了。
每一个红色圈圈代表着一个公开的webservice接口,每个接口代码自动生成了5个方法。调用异步方法的时候:
WebService1 service = ne...
idea部署Tomcat时 war和war exploded区别
部署tomcat时,会遇到一道选择题
是选择war 还是 war exploded呢?所以,首先我们得先知道他们的区别:
1.war:顾名思义,先打成war包再上传到服务器。这种方式是不支持热部署的
2.war exploded:把文件夹的位置关系上传到服务器,也就是将文件夹中的classes,html等移到Tomcat 部署文件夹中,加载部署。这种方式是支持热部署的,本人一般使用此方式...
idea 添加tomcat/Jetty应用找不到Tomcat/Jetty Server?
添加tomcat应该发现找不到Tomcat Server肿么办,莫慌,咱们一起来设置
File→Settings→Application Servers或者CTRL+ALT+S→Application Servers
点击上图的+就可以添加你需要server了。嘿嘿,是不是很简单呢?设置完毕就可以在Edit Configurations看到server啦
希望对您有所帮助哟...
Idea--Tomcate配置中的On Upate Action 与 On Frame Deactivation的区别
这两个选项的设置,依赖于 项目的部署方式 是 exploded
1、on update action
首先来看 on update action 相关的解释,从字面上理解 就是 手工触发 update 动作的时候 做什么: update resources ---- 更新静态的资源,比如html,js,css等 运行模式和调试模式都是立即生效。 update classes and r...
idea2018 注册码 License server
1.http://active.chinapyg.com/
博主亲测 2018.1 和 2018.2都可使用,不过需要网络畅通哦!
2.第二种针对2018.1,需要下载补丁:http://idea.lanyus.com/jar/JetbrainsCrack-2.7-release-str.jar,将补丁放在安装包的/bin路径下,打开idea.exe.vmoptions和idea64.exe....
在Eclipse统计项目的代码行数
1.首先选中需要统计的项目或文件夹,CTREL+H(也可以在Eclipse顶部菜单栏打开Search,然后选择File)
2.勾选使用正则表达式(Regular expression),在搜索文本框输入“\n” ,在文件名规则中输入*或*.java(规则自己定) ,在搜索范围里选中Enclosing projects/Workspace,亲测效果一样
效果如下,注意:此处统计包含注释和空白...
周排行