自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

laciqs

。。。。。。

  • 博客(53)
  • 资源 (1)
  • 收藏
  • 关注

原创 C++ CRTP设计范式

CRTP(Curiously Recurring Template Pattern)奇异递归模板范式是一个相对少有人知的C++设计范式,它可以实现基类指针调用派生类的函数,从而实现另类多态。这种设计范式在COM中很常见,配合智能指针使用,它的好处是一旦建立起COM ABI,即使开发人员忘记在基类析构中使用virtual关键字,对象释放时依然不会发生内存泄露。

2024-02-21 18:54:43 446

原创 一个命令下载Windows的所有pdb

所以就萌生了一个简单的想法:有没有办法预先下载好所有符号,之后只要符号没有更新就不再下载呢?Windows的一大特点就是微软提供了非常好用的调试框架及调试工具(特别是强大的Windbg),并且免费提供系统文件的pdb,从而使得不论R3还是R0的软件调试都变得清晰很多。但是微软的符号服务器有个比较大的问题,就是下载速度比较慢,Windbg动不动就要卡住下载符号一番,实在让人难受。/r是递归,/s是指定存放目录和下载源,/od是输出过程中的详细信息(不然默认没有输出不知道进展)。

2023-09-11 16:28:41 876

原创 Shadow API技术

深入浅出Windows API程序设计:核心编程篇》这本书介绍了Shadow API技术,此技术可以起到隐藏api调用的作用,从而显著增加调试和逆向的难度。在Win11 22H2自测通过,Debug版和Release版都可以,Debug版的区别就是MessageBoxW函数短一点,但是关键的call偏移没有变。但是里面给的示例代码由于严重依赖于操作系统版本,不要说Win11,在部分Win10上都会出现崩溃,这很不利于学习。所以按照书中原来的思路是肯定不行的,需要自己手动修正新代码的偏移。

2023-09-02 18:40:03 248

原创 C语言的类型转换

C语言的类型转换很重要,经常出现,但是往往不被人注意,而在汇编代码当中就暴露无遗了。

2023-09-02 18:30:14 611 1

原创 如何批量编译连接程序?

最近有一个需求,一个目录下有N多个.c文件,想办法把它们全部编译。用VC建个工程把它们全扔进去构建是不行的,连接的时候会出错,因为VC最后只想生成一个exe文件,这样最后只能得到一堆obj文件。后来知道了VC的编译器是cl.exe(如果你的cmd不识别cl,请查看这篇文章:http://blog.csdn.net/wangningyu/article/details/4830920,设置环

2012-07-23 21:42:46 1269 4

原创 一道与预处理有关的题目

在看雪看到了刘涛涛出的一道题:http://bbs.pediy.com/showthread.php?t=130889过去曾经做过类似的,这里再给个解释的资料:The # operator has a similar difficulty, by the way. If #x appears in a replacement list, where x is a macro paramet

2012-07-21 20:53:29 766

原创 指针的本质

#include int main(int argc, char *argv[]) { int a[5] = { 1, 2, 3, 4, 5 }; unsigned int p; for ((int *)p = a; (int *)p < a+5; p += sizeof(*a)) printf("%d ", *(int *)p); printf("\n

2012-07-09 21:42:46 1056 2

原创 奇偶判断的逆向

发到了看雪:http://bbs.pediy.com/showthread.php?t=153033以下类似代码是我们常用的:代码:if (n % 2)          printf("Odd");else          printf("Even");先来看一下VC6中Debug版的汇编代码:代码:10:       if (n % 2)

2012-07-06 09:41:16 1357

原创 double类型逆向

发到了看雪:http://bbs.pediy.com/showthread.php?t=153009建议先自己动手尝试一下再阅读本文。看代码:代码:9:        double fDouble = 15.5;  00410958   mov         dword ptr [ebp-8],0  0041095F   mov         dword ptr [

2012-07-05 15:41:54 1228

原创 烫烫烫烫烫的来源

在VC中特别是缓冲区溢出后,常常会出现一堆烫烫烫烫烫,它们是从哪来的呢?原来,VC在Debug模式下会使用CCh来填充堆栈来方便调试(CCh是int 3h的机器码)。0040101C lea edi,[ebp-140h]00401022 mov ecx,50h00401027 mov eax,0CCCCCCCCh004010

2012-07-04 20:00:36 5502

原创 toupper()与tolower()的编写

原理:大写字母ASCII码的第5位为0,小写字母的为1。#include int toupper(int ch){ return ch & 0xDF;}int tolower(int ch){ return ch | 0x20;}int main(int argc, char *argv[]){ printf("%c %c\n", toupper('A'), tol

2012-06-11 14:58:38 1203

原创 替换密码

代码写得比较trick……#include #include #include void exchange(char *s, const char *sigema) { while (*s) { // 保持原大小写 *s = isupper(*s) ? sigema[*s-'A'] : tolower(sigema[

2012-06-09 21:35:06 1055

原创 凯撒密码

#include #include void caesar(char *s, int n){ while (*s) { *s += n; s++; }}int main(void){ char s[] = "MOMOTARO"; caesar(s, 3); puts(s); return 0;}

2012-06-09 21:25:08 1643

原创 《汇编语言》笔记

Chapter 1指令和数据是应用上的概念。在内存或磁盘上,指令和数据没有任何区别。地址总线上能传送多少个不同的信息,CPU就可以对多少个存储单元进行寻址。数据总线的宽度决定了CPU和外界的数据传送速度。有多少根控制总线,就意味着CPU提供了对外部器件的多少种控制。所以,控制总线的宽度决定了CPU对外部器件的控制能力。80368CPU的地址宽度为

2012-06-03 09:21:26 798 1

原创 看书不一定

看书不一定要按目录的顺序看。看书不一定要看完。看书不一定要每个字都看。看书不一定都要看懂。看书不一定要做里面的习题。看书不一定要把里面的习题做完。看书不一定只看一遍。看书不一定要有了能看完整本书的基础知识后再去看。看书不一定是借来的的书才抓紧看(crystalNB加)。

2012-06-02 10:24:44 828 2

原创 继“减少重复输入,在 VIM 中使用模板”

减少重复输入,在 VIM 中使用模板虽然那篇文章的作者达到了想要的效果,但是每次输入!!cat ~/Templates/cmain.c这么长的一大串未免冗余,不妨写一个脚本出来:#!/bin/bashcat ~/Templates/cmain.cexit 0保存为lct(loading c template),再加权限:chmod a+x lct然后移动

2011-11-22 21:49:29 969

原创 Windows下硬盘安装Ubuntu最简方法

有关硬盘安装Ubuntu的文章很多,但都是又下grub又手动复制这个那个的。我认为这是一种误导,因为wubi本身就已经给我们提供了简单的方法。本方法,Kubuntu、Xubuntu甚至Mint都适用。下载iso文件,把里面的wubi解压出来,和iso文件放同一目录,然后wubi安装,重启。由于wubi可能没有设置操作系统列表的等待时间,所以给出XP下的解决方案(其他Windows版本应

2011-11-22 15:28:43 971 1

原创 An Introduction to Recursion笔记

在TopCoder中的Algorithm Tutorial看到一套讲解递归的文章:An Introduction to Recursion, Part 1An Introduction to Recursion, Part 2感觉很不错,做一下笔记:Some key considerations in designing a recursive algorithm:

2011-10-23 17:37:46 1036 2

原创 《算法导论》第2章笔记(不定期更新中)

2.1 插入排序插入排序的思想:把列表分成一个有序列表和一个无序列表,每次选取无序列表中的第一个元素,并插入到有序列表的相应位置。练习2.1-3:循环不变式:在A[1...i-1]中不存在v。初始化:在第一次迭代之前,i=1,A[1...0]中没有任何

2011-10-16 16:14:54 2035 1

原创 到底该如何学习算法?

俗话说“磨刀不误砍柴工”,虽然我已经开始砍柴,但磨刀还是在继续。除了四处搜罗算法书外,我也看了N多前辈的经验之谈,大到刘未鹏的文章,小到网友们对多本算法书的评论,我都有所吸收,也愈加感到知其所以然的必要性。很多人学习算法都特别重视代码,不管是伪代码也好还是具体语言代码也好,然

2011-10-16 15:30:18 15269 5

原创 Linux学习笔记

环境:Ubuntu1. 安装小小输入法yong.uueasy.com/Linux下的输入法一直让我比较郁闷,不过现在好了……挂接百度、QQ云输入法(搜狗的用不了,所以这里不写了):[IM]default=80=yong1=wubi2=zhengma3=erbi4=english5=gbk6=pinyin7=wbpy8=百度9=qq

2011-10-07 13:47:00 1846

原创 [NOIP1998]连接多位数

看到这题觉得可以用字符串存储数字,然后用strcmp()排序下就可以秒杀了,然而在两个数字的比较中,如果一者是另一者的“子集”(比如32和321),这样比较就可能会出现问题,于是特殊情况特殊处理。顺便熟悉下cmp函数的编写,之前一直对其返回值模糊不清。#include

2011-10-03 22:34:12 1743

原创 strcpy()的简洁实现

char *strcpy(char *dest, const char *src){ if (dest == src) return dest; assert((dest != null) && (src != null)) char *temp = dest; while (*dest++ = *src++) // 注意这里

2011-10-01 17:38:56 868

原创 你的课本就是最好的词汇书

大多数人都有这样一个误区,就是认为背单词就一定要去买一本词汇书,然后用那本书刻苦努力地去背,但是这样的效果真的好吗?诚然,是有一些人破釜沉舟,一心拼搏,通过这种方法取得了胜利(例如《17天搞定GRE》单词的作者杨鹏),但大多数人使用这种方法的效果并不好,这不仅仅是毅力问题,而是:

2011-10-01 14:09:14 2619 3

原创 如何解题

相信几乎每个人都或多或少地解过题,对于学生们来说,解题更是家常便饭。我们常常把一个人的解题能力与一个人的流体智力水平挂钩,的确,对于流体智力水平比较高的人来说,解题确实会比较得心应手。对于流体智力不是特别优秀的人来说,通过大量训练来提高晶体智力的方法虽然有不小的作用,但是局限性依然很大。其实,我认为与其依靠题海战术,倒不如使用晶体智力来模拟流体智力,即学会如何尽最大限度地使用你的大脑,这也正是本篇

2011-10-01 11:50:33 3084 1

原创 黑白图像显示栈版

《算法竞赛入门经典》中的例子,书中只提供了递归栈的版本,让读者试着改成显示栈的。不过我改了半天也没改成,想起《Linux C编程一站式学习》中有深度优先搜索一节过去就没看懂,于是就参考了那一节,这次不仅看懂了,显示栈的版本也写成了,看来黑白图像和走迷宫这两个例子真是很适合结合起来

2011-09-24 16:25:59 1164

原创 到底该如何学习数据结构?

昨天买了本《大话数据结构》,之后就开始看。数据结构给我的印象就是一大堆code,自己实现很麻烦,而且很容易出detail errors,望着书上的代码,我在想,难道我真要把他们都能独自写下来?其实想想怎么也是不必的,说最低级的要求,工作中copy一下代码然后会调用function

2011-08-19 17:53:41 9713 7

原创 Automatic Poetry

不小心秒杀了- -!是我第一个在OJ秒杀的非超级简单题。#include #include #define N 110void make_c1(char s[], char ss[][N], char c1[]){ int k, p, j, c, in; for

2011-08-17 18:42:53 920

原创 Where's Waldorf?

开始没看清楚题意,把题看复杂了,于是使用了递归,写完后一看发现自己写的不就是以前自己没看懂的深度优先搜索(DFS)么?后来发现还真是,自己居然“发明”了DFS,而且用的还是递归栈,不禁得意,结果多次WA,不知为何。无奈之下只好拿别人的代码对拍,把样例数据加了点,发现自己的程序得出

2011-08-07 16:22:35 1382

原创 Palindromes

这道题比简单地判断回文难度大不少,我使用的是常量表。需要注意的是不要以为遍历到strlen(s)/2就总是没问题,当strlen(s)=1时就杯具,虽然可以单独判断这种情况,但是此题并不要求效率,所以干脆全遍历了。还有重要的一点就是你要保证所有情况下你的is_mir函数都能返回正

2011-08-06 21:41:40 513

原创 Reverse Text

简单题,不过如果用C写却不了解C的输入是不好做对的,特别是不好做巧,需要注意的是数字输入后输入队列中的回车应该丢弃掉,有的人用fflush(stdin);,这是Undefined的先不谈,我的方法比那个简单多了。#include #define N 100int main(void){ int n, i; char s[N]; scanf("%d ", &n);

2011-08-06 21:40:52 634

原创 Linear Cellular Automata

简单题,既然边界被看做密集度为0的培养皿,那就把问题一般化,把数组的边界空出即可,由于遍历修改原培养皿由于前面的培养皿发生变化会使得后面的计算出错,所以再设置一个辅助数组。注意每个Case的清零操作和最后不要多输出一个空格(这题多输出UvaOJ不判PE判WA)。#includ

2011-08-06 21:40:14 703

原创 The Collatz Sequence

看起来很简单的题目,实际上陷阱不少:1. 最开始的A也算一项。2. 最后的1也算一项。3. 如果某个A>limit,那么此项不计入。4. 3*A+1很可能会溢出(题目迷惑人说A最大为2,147,483,647,还来个解释:the largest value tha

2011-08-05 22:09:29 2102

原创 Hangman Judge

先预处理,否则很容易Bug百出- -。#include #include #define N 100int delete_repetition(char s[]){ int p[26] = {0}, len = strlen(s); while (*s) {

2011-08-05 21:24:14 911

原创 解读御坂美琴みさか的菱形打印程序——谈如何学习算法

百度C语言吧主御坂美琴みさか的《C语言循环的小艺术》很久以前我就复制下来收藏了,不过一直没有研究。昨天Uval的AOAPC I: Beginning Algorithm Contests (Rujia Liu)做到Triangle Wave的时候又看到了这种对称图形,虽然用那种“

2011-08-05 17:23:05 3804

原创 Marvelous Mazes

简单题目:#include #include int main(void){ int c, i, sum = 0; while ((c = getchar()) != EOF) { if (isdigit(c))

2011-08-05 12:21:16 781

原创 qsort()的compare函数示例

超级简洁的写法: int compare_parts(const void *p, const void *q){ return ((struct part *) p)->number number;}

2011-08-05 11:24:11 1641 3

原创 C语言中整型运算取Ceiling问题

此题来自:《Linux C编程一站式学习》假设变量x和n是两个正整数,我们知道x/n这个表达式的结果要取Floor,例如x是17,n是4,则结果是4。如果希望结果取Ceiling应该怎么写表达式呢?例如x是17,n是4,则结果是5;x是16,n是4,则结果是4。网上对这道

2011-08-05 11:11:48 3324

原创 一道排序题

问题:一组数字:21,25,11,32,12,35,55,77,66,写程序按照下面排序。(第1个数最大,第2个数最小,第3个数是剩下数中最大的,第4个是剩下数中最小的……)我的思路:1. 在长度为n的序列中找出最大数和最小数,分别与第一、第二个元素进行交换。2. 递

2011-08-05 11:10:36 776

原创 猫吃老鼠问题

一只猫每天要抓很多老鼠,但这只猫自从参与躲猫猫游戏之后,喜欢上了躲猫猫游戏,每天让抓到的老鼠排队,然后按照1,3,5,7,9,100……等奇数位吃老鼠,然后在剩下的队列里面,再从头吃1,3,5,7……等奇数位上的老鼠,最后总会剩余一只老鼠,猫会放生这只老鼠,那么为了逃生,写一个程

2011-08-05 10:37:34 1436

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除