摘要: 最近有个项目需要生成静态编译的可执行文件,以便在其它linux的机器中运行,开始以为非常简单,直接在编译中加个-static选项不就是了,结果却和我想的太不一样了,下面说下我遇到的问题以及解决的方法。 开始按照设想应该只要在编译中加个-static选项就可以了,不过却报下面的错误: cc -g -s 阅读全文
posted @ 2013-05-11 18:23 在于思考 阅读(11077) 评论(0) 推荐(0) 编辑
摘要: 对于一个程序员来说,调试是很重要的,可以节约找到bug的时间,不过以前在linux下一直是对c进行调试的,今天突然要对汇编进行调试还真不知道怎么调,特别是对linux下调试汇编程序基本没搞过。记得以前上课学masm时,用的是debug,貌似映像中对汇编挺难调试的。于是就在网上查了下在linux下调试nasm汇编程序的资料,看起来比debug简单点。1 写和编译源文件 首先准备个hello.asm文件,这个学语言必编的程序,代码如下: section .datamsg: db "hello, world", 10len equ $-msg section .text ... 阅读全文
posted @ 2013-04-23 16:23 在于思考 阅读(4268) 评论(1) 推荐(3) 编辑
摘要: 今天看了于渊的《自己动手写操作系统》中的第一章,怎样10分钟写个操作系统,这个操作系统其实就是一个启动程序。 当计算机电源被打开后,它会先进行加电自检(POST),然后寻找启动盘,如果是选择从软盘启动,计算机就会查找软盘的0面0磁道1扇区,如果发现它以0xAA55结束,则BIOS认为它是一个引导扇区,然后BIOS就会把引导扇区的前512字节的引导代码拷贝到内存的0000:7c00处并将控制器彻底交给这段引导代码。 简单的引导代码如下所示: 1 org 07c00h ;告诉编译器加载到07c00h处 2 3 mov ax, cs 4 mov ds, a... 阅读全文
posted @ 2013-04-22 19:30 在于思考 阅读(4840) 评论(3) 推荐(0) 编辑
摘要: 一.声明虽然Linux的核心代码大部分是用C语言编写的,但是不可避免的其中还是有一部分是用汇编语言写成的。有些汇编语言代码是直接写在汇编源程序中的,特别是Linux的启动代码部分;还有一些则是利用gcc的内嵌汇编语言嵌在C语言程序中的。这篇文章简单介绍了gcc中的内嵌式汇编语言,主要想帮助那些才开始阅读Linux核心代码的朋友们能够更快的入手。写这篇文章的主要信息来源是GNU的两个info文件:as.info和gcc.info,如果你觉得这篇文章中的介绍还不够详细的话,你可以查阅这两个文件。当然,直接查阅这两个文件可以获得更加权威的信息。如果你不想被这两篇文档中的一大堆信息搞迷糊的话,我建议你 阅读全文
posted @ 2013-04-21 15:33 在于思考 阅读(1113) 评论(0) 推荐(0) 编辑
摘要: 最近看了本书,突然对于地址空间有些疑惑。在深入理解linux内核中把地址分为三类:逻辑地址(汇编语言中操作数地址或指令的地址,对于80x86的cup,逻辑地址是段+段内偏移地址)、线性地址(也叫虚拟地址)和物理地址。但在Stott Maxwell的《Linux Core Kernel Comment 阅读全文
posted @ 2013-04-17 19:56 在于思考 阅读(11468) 评论(1) 推荐(4) 编辑
摘要: 1 第一题小Q系列故事——屌丝的逆袭 表示这道题基本没什么算法,学过计算机语言的应该都能搞定吧。2 第二题小明系列故事——买年货 这道题直接用01背包问题就可以解决了,只是除了钱的限制,还有积分的限制和免费的情况,就是这点在调试程序的时候出了点小问题,总是wa。状态可以定义为dp[x][y][z],x表示钱的,y表示积分的,z表示免费的状态,然后其它的和背包问题差不多了,只是维数到了3维。 1 #include <stdio.h> 2 #include <string.h> 3 4 #define max(a,b) a > b ? a : b 5 int n, v 阅读全文
posted @ 2013-04-16 14:27 在于思考 阅读(749) 评论(0) 推荐(0) 编辑
摘要: 平衡负载 Du熊正在负责一个大型的项目,目前有K台服务器,有N个任务需要用这K台服务器来完成,所以要把这些任务分成K个部分来完成,在同上台服务器上执行的任务必须是连续的任务,每个任务有各自需要的执行时间。 例如N=5,K=2,每个任务需要时间分别为5,3,1,4,7分钟,那么我们可以分成(5)(3 1 4 7)两部分,这样第一台服务器所花时间就是5分钟,而第二台机器需要花15分钟,当然,所有任务完成的时间是按最迟完成的那台服务器的时间,即这样划分的话完成所有任务所需要的时间就是15分钟。而另外一种划分方法是(5 3 1)(4 7),这种划分方案完成所有任务的时间就是11分钟,也是最优的一种.. 阅读全文
posted @ 2013-04-16 09:13 在于思考 阅读(1479) 评论(6) 推荐(0) 编辑
摘要: 1 编译前的准备 下载linux源文件:https://www.kernel.org/,我下载的是linux-3.7.4版本,解压到/usr/src/kernels目录中,然后进入/usr/src/kernels/linux-3.7.4中,用make menuconfig命令来选择要编译的模块,但使用make menuconfig(重新编译内核常用的命令,还可以用其他的)报下面的错误:说缺少ncurses库,然后安装ncurses开发库就可以了,ubuntu下貌似是libncurses-dev包 yum install ncurses-devel.i686再次使用make menuconf.. 阅读全文
posted @ 2013-04-15 20:56 在于思考 阅读(1695) 评论(1) 推荐(3) 编辑
摘要: 一、问题的提出编写一个耗时的单线程程序: 新建一个基于对话框的应用程序SingleThread,在主对话框IDD_SINGLETHREAD_DIALOG添加一个按钮,ID为IDC_SLEEP_SIX_SECOND,标题为“延时6秒”,添加按钮的响应函数,代码如下:voidCSingleThreadDlg::OnSleepSixSecond(){Sleep(6000);//延时6秒} 编译并运行应用程序,单击“延时6秒”按钮,你就会发现在这6秒期间程序就象“死机”一样,不在响应其它消息。为了更好地处理这种耗时的操作,我们有必要学习——多线程编程。二、多线程概述 进程和线程都是操作系统的概念... 阅读全文
posted @ 2013-04-12 20:22 在于思考 阅读(228) 评论(0) 推荐(0) 编辑
摘要: 转自:http://blog.csdn.net/abcjennifer/article/details/7480019最近有些人在问MFC编程一些要点,有一些句柄的获取、指针的获取是常见的问题,本文将对这些问题做以解释,参考了前人的笔录(见reference),希望能够帮助大家更方便地进行MFC程序开发。 一般我们使用的框架是VC提供的Wizard生成的MFC App Wizard(exe)框架,无论是多文档还是单文档,都存在指针和句柄获取和操作问题。本文中将针对各类句柄的获得、指针的获得以及MFC中常见应用进行阐述并举例。本文内容索引:============================ 阅读全文
posted @ 2013-04-12 20:11 在于思考 阅读(371) 评论(0) 推荐(0) 编辑