|
用户名:HackGou 笔名:HackGou 地区: 行业:其他 |
| 日 | 一 | 二 | 三 | 四 | 五 | 六 |
憨狗自说自话之理想国度
在Windos上象Linux一样工作
平时而学习啦或者看看文档啦当然喜欢在Debian/FreeBSD上玩,
看录像啦玩游戏啦喜欢在Windows下搞,久了琢磨着想办法增强windows的shell——cmd.exe以让它也能够象bash那样十八般兵器样样能行。心动不如行动。
俗话说磨刀不误砍柴功,先找点工具最好能够找到那些*NIX上常见的工具的Win32版本:
把我的大头贴添作Grub的背景图
第一次看见Grub的时候是RH8的时候,漂亮的Splash背景、可爱的小红帽Tux,漂亮极了,可是Debian下的Grub可不那么靓,看看我怎么让Grub拥有我自己的SplashImage
本文所用补丁为0.93的补丁。如果安装了其他版本的grub,请先卸掉。
下载grub0.93并打上patch,编译并安装,可以使用如下脚本:
mkdir grub-src
cd grub-src
wget http://ruslug.rutgers.edu/~mcgrof/grub-images/grub-debian-sources/grub_0.93+cvs20030224.orig.tar.gz
wget http://ruslug.rutgers.edu/~mcgrof/grub-images/grub-debian-sources/grub_0.93+cvs20030224-2.diff.gz
tar zxvf grub_0.93+cvs20030224.orig.tar.gz
gunzip grub_0.93+cvs20030224-2.diff.gz
patch -p0 < grub_0.93+cvs20030224-2.diff
cd grub-0.93+cvs20030224
./configure
make
make install
将grub的安装到/dev/hda上:
grub-install /dev/hda
二。准备splashimage选项要求的文件,当然就是我的大头贴啦:
1. 文件类型 :xpm.gz
2. 图象大小:640x480
3. 颜色深度:14 色
三。压缩图象并更改grub.conf
1. 用gzip压缩xpm格式的图片,放到/boot/grub下
hackgou:~# gzip /boot/grub/love.xpm
hackgou:~# ls /boot/grub/*.gz
/boot/grub/love.xpm.gz /boot/grub/open.c.xpm.gz
2.编辑/etc/grub.conf加入
splashimage=(hd0,1)/boot/grub/love.xpm.gz
现在可以重新启动系统,欣赏你的成果了。
Tips:
如何获取14色图片:
使用GIMP的14色调色板:打开你的图象文件,用Alt+I(或则图象->模式->索引)打开调色板优化选项对话
框,在生成优化调色板中填入14,然后确定,关闭对话框,这样就生成了你所需
的14色图片保存文件。
The GPG Public Key
一生里和你爱的人做完这50件事
什么是幸福?很难回答!
看看这儿,如果能够做完了,你便会觉得什么是幸福。
手动干掉这个QQ尾巴
同事上了会儿网,没想到我回来开QQ时,居然发现中毒了!呵呵,典型的QQ尾巴。
没办法了,好久没有中毒过,也没有后备的杀毒软件,只好手工来干了......
ps
Name Pid Pri Thd Hnd Mem User Time Kernel Time Elapsed Time
Idle 0 0 1 0 16 0:00:00.000 0:18:00.914 0:25:10.632
System 8 8 45 132 272 0:00:00.000 0:00:13.719 0:25:10.632
SMSS 196 11 6 33 388 0:00:00.020 0:00:02.453 0:25:10.632
CSRSS 224 13 10 243 6732 0:00:01.351 0:00:09.203 0:24:51.054
WINLOGON 244 13 17 378 2376 0:00:00.460 0:00:00.991 0:24:47.158
SERVICES 272 9 22 361 6820 0:00:36.632 0:00:01.742 0:24:44.444
LSASS 284 9 17 252 5020 0:00:00.320 0:00:00.280 0:24:44.394
LLSSRV 480 9 9 74 1864 0:00:00.030 0:00:00.020 0:24:01.963
svchost 528 8 10 230 3304 0:00:00.060 0:00:00.100 0:24:01.332
svchost 568 8 17 214 4332 0:00:00.200 0:00:00.420 0:24:00.461
WinMgmt 604 8 4 113 768 0:00:03.935 0:00:00.280 0:24:00.110
totalcmd 840 8 3 89 2732 0:00:00.731 0:00:00.931 0:22:47.175
Maxthon 904 8 19 826 25036 0:02:14.733 0:00:42.040 0:19:48.188
regedit 844 8 1 24 1828 0:00:00.701 0:00:01.371 0:11:13.848
cmd 448 8 1 25 1100 0:00:00.050 0:00:00.090 0:07:19.732
conime 684 8 1 17 912 0:00:00.010 0:00:00.020 0:07:19.471
Explorer 848 8 13 233 8024 0:00:00.941 0:00:02.163 0:03:57.321
ps 872 8 2 87 1372 0:00:00.040 0:00:00.030 0:00:00.050
那个848有点问题,本来的Explorer是没有这么回事的。
listdlls 848
explorer.exe pid: 848
Command line: Explorer.exe C:\WINNT\system32\msapi.exe
Base Size Version Path
0x00400000 0x3e000 5.00.3700.6690 C:\WINNT\Explorer.exe
0x77f80000 0x7b000 5.00.2195.6685 C:\WINNT\system32\ntdll.dll
0x796d0000 0x62000 5.00.2195.6710 C:\WINNT\system32\ADVAPI32.DLL
0x77e60000 0xd8000 5.00.2195.6688 C:\WINNT\system32\KERNEL32.DLL
0x786f0000 0x71000 5.00.2195.6701 C:\WINNT\system32\RPCRT4.DLL
0x77f40000 0x3c000 5.00.2195.6660 C:\WINNT\system32\GDI32.DLL
0x77df0000 0x65000 5.00.2195.6688 C:\WINNT\system32\USER32.DLL
0x70bd0000 0x65000 6.00.2800.1106 C:\WINNT\system32\SHLWAPI.DLL
0x78000000 0x45000 6.01.9844.0000 C:\WINNT\system32\msvcrt.dll
0x71710000 0x84000 5.81.4916.0400 C:\WINNT\system32\COMCTL32.DLL
0x75e00000 0x1a000 5.00.2195.6655 C:\WINNT\system32\IMM32.DLL
0x78f90000 0x248000 5.00.3700.6705 C:\WINNT\system32\SHELL32.dll
0x77a30000 0xf7000 5.00.2195.6692 C:\WINNT\system32\OLE32.DLL
0x72c50000 0x90000 2000.02.3511.0000 C:\WINNT\system32\CLBCATQ.DLL
0x77990000 0x9b000 2.40.4522.0000 C:\WINNT\system32\OLEAUT32.dll
0x71000000 0x149000 6.00.2800.1106 C:\WINNT\system32\SHDOCVW.DLL
0x71160000 0xfd000 6.00.2800.1106 C:\WINNT\system32\browseui.dll
0x76ee0000 0x77000 5.00.2195.6604 C:\WINNT\system32\NETSHELL.dll
0x74fb0000 0x14000 5.00.2195.6601 C:\WINNT\system32\WS2_32.DLL
0x74fa0000 0x8000 5.00.2134.0001 C:\WINNT\system32\WS2HELP.DLL
0x70340000 0x41000 6.00.2800.1106 C:\WINNT\system32\webcheck.dll
0x76670000 0x18000 5.00.2195.6601 C:\WINNT\system32\stobject.dll
0x766e0000 0x8000 5.00.3502.6601 C:\WINNT\system32\BATMETER.DLL
0x6d990000 0xac000 5.00.2195.6622 C:\WINNT\system32\SETUPAPI.DLL
0x794d0000 0x62000 5.00.2195.6711 C:\WINNT\system32\USERENV.DLL
0x76690000 0x7000 5.00.3502.6601 C:\WINNT\system32\POWRPROF.DLL
0x77530000 0x30000 5.00.2161.0001 C:\WINNT\system32\WINMM.DLL
0x00ef0000 0x204000 2.00.2600.1183 C:\WINNT\system32\MSI.DLL
0x01330000 0x25000 C:\WINNT\system32\msapi.dll
0x74fd0000 0xa000 5.00.2195.6603 C:\WINNT\system32\wsock32.dll
0x77810000 0x3e000 5.00.2195.6705 C:\WINNT\system32\cscui.dll
0x77080000 0x23000 5.00.2195.6713 C:\WINNT\system32\CSCDLL.DLL
0x79a90000 0x11000 5.00.2195.6611 C:\WINNT\system32\MPR.DLL
0x750f0000 0xc000 5.00.2195.6601 C:\WINNT\System32\ntlanman.dll
0x751a0000 0x15000 5.00.2195.6601 C:\WINNT\System32\NETUI0.DLL
0x75160000 0x38000 5.00.2134.0001 C:\WINNT\System32\NETUI1.DLL
0x75100000 0x4f000 5.00.2195.6601 C:\WINNT\System32\NETAPI32.DLL
0x797b0000 0xf000 5.00.2195.6695 C:\WINNT\System32\SECUR32.DLL
0x75150000 0x6000 5.00.2134.0001 C:\WINNT\System32\NETRAP.DLL
0x750e0000 0xf000 5.00.2195.6666 C:\WINNT\System32\SAMLIB.DLL
0x77930000 0x2a000 5.00.2195.6666 C:\WINNT\system32\WLDAP32.DLL
0x77960000 0x24000 5.00.2195.6680 C:\WINNT\System32\DNSAPI.DLL
0x77520000 0x8000 5.00.2195.6673 C:\WINNT\system32\wdmaud.drv
0x773c0000 0x8000 5.00.2134.0001 C:\WINNT\system32\msacm32.drv
0x773d0000 0x13000 5.00.2134.0001 C:\WINNT\system32\MSACM32.dll
0x70200000 0x95000 6.00.2800.1106 C:\WINNT\system32\WININET.dll
0x77400000 0x78000 5.131.2195.6661 C:\WINNT\system32\CRYPT32.dll
0x773f0000 0x10000 5.00.2195.6666 C:\WINNT\system32\MSASN1.DLL
0x718c0000 0x84000 6.00.2800.1106 C:\WINNT\system32\shdoclc.dll
这个 0x01330000 0x25000 C:\WINNT\system32\msapi.dll
没有版本号,没有其他什么信息可疑:
listdlls -d C:\WINNT\system32\msapi.dll
explorer.exe pid: 848
Command line: Explorer.exe C:\WINNT\system32\msapi.exe
Base Size Version Path
0x01330000 0x25000 C:\WINNT\system32\msapi.dll
什么时候有这个命令的啊??那个msapi.exe肯定绝非善类。
autorun
HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\Shell
Explorer.exe
Windows Explorer
Microsoft Corporation
c:\winnt\explorer.exe
C:\WINNT\system32\msapi.exe
果然在C:\WINNT\system32\msapi.exe下的作为每个用户的shell来启动。
del C:\WINNT\system32\msapi.exe
dir C:\WINNT\system32\msapi.exe
啊居然还在。还对他进行保护,可惜没法动态卸掉msapi.dll,没关系——瞒天过海!
cp c:\winnt\system32\calc.exe C:\WINNT\system32\msapi.exe
psshutdown -r
然后,
del C:\WINNT\system32\msapi.dll
del C:\WINNT\system32\msapi.exe
搞定!
还是在Linux下好,从来没有这些担心。
一棵开花的树
一棵开花的树
席慕容
如何让你遇见我
在我最美丽的时刻
......
席慕容 一棵开花的树
如何让你遇见我
在我最美丽的时刻
为这
我已在佛前求了五百年
求佛让我们结一段尘缘
佛於是把我化做一棵树
长在你必经的路旁
阳光下
慎重地开满了花
朵朵都是我前世的盼望
当你走近
请你细听
那颤抖的叶
是我等待的热情
而当你终於无视地走过
在你身後落了一地的
朋友啊
那不是花瓣
那是我凋零的心
终于有个Gmail了!
汇编的点点总结
哇塞!这么热闹啊??呵呵
我也来凑凑热闹!
1。说说仙人掌兄的问题吧:
[QUOTE]而你给CPU一个地址然后它怎么找到对应的内存空间,[/QUOTE]
其实这个挺简单的:
先说说我们讨论的这个问题的大前提:我们现在讨论的是80×86时代的汇编(也是20位的dos时代,可别以为有非20位的dos哦/
:P),而非如今主流的32位平台,因为32位平台向下兼容,所以我们现在的话题[COLOR=red]有可能是对[/COLOR]的,因为很多
内容在32位下就不一定了。
开始主题: [QUOTE]而你给CPU一个地址然后它怎么找到对应的内存空间,[/QUOTE]
在dos时代(硬件方面是386以下),因为16位的处理器无法访问(寻址)20位的地址总线提供的1M内存,于是就使用分段的办
法解决:每个段64K,
(为什么是64K??因为16位寄存器可以存储的最大范围就是2^16=2^6×2^10=64K。
按照最大段来计算,多少段?1M/64K=16个段),这样就可以利用两个16位寄存器来寻址这20位的1M内存(虽然,是浪费了12位
宝贵的寄存器位数,两个16位寄存器合起来的寻址能力是2^32=4G,现在只需利用其中2^20的寻址能力,但却变相实现了利用
两个16位寄存器来寻址20位1M的内存的功能),因此可以利用一个寄存器来表示段地址(那个64K的段从哪儿开始),另外一个
16位的寄存器来表示你要访问的数据在该64K的段内的什么地方。起前一个功能的寄存器就叫段寄存器(按段寄存器所指的段的
用途来分,这些段寄存器又分为:CS、DS、SS、ES等。而后一个功能则一般通过通用寄存器来实现的,通常后面这个用来在段
内寻址的地址就叫做段内偏移(offset),它也是16位的寄存器。
在具体寻址的时候是如何计算的呢?段寄存器和段内偏移地址直接相加?不是的,因为那样最多能够达到17位的寻址能力。正
确的做法是将段寄存器左移4位,然后加上段内偏移地址,这样就得到了20位的地址了,使用则20位地址就能够实现1M的存储空
间寻址了。
这个计算是谁来完成的呢??人工么?还是编译器编译的时候执行的呢??都不是。而是CPU内部的BIU(bus interface unit
,总线接口单元)来完成。它包括段寄存器(CS、DC、SS、ES)和地址产生器(当然不止两个部分,但是和内存寻址的就主要是
这两部分),当遇到一个寻址的指令后,地址产生器就执行逻辑地址(16位的段:16位的偏移)到20位的物理地址(PA)的计
算,计算的公式如前所述(段地址乘以16+偏移地址),这样就"找到对应的内存空间"。
2。 [QUOTE]一个汇编指令按理来讲对应的二进制代码应该是相同的[/QUOTE]
这个问题其实和汇编语句到底如何编译位机器语言有关,一条汇编语句包含两个部分:80×86指令和数据部分。其中数据部分
包括:立即数、寄存器等等。比如mov
dx,ax其中mov是指令部分。而dx,ax就是数据部分(也可以理解为汉语的动宾关系:指令为动词,数据部分为宾语,别问我谁是
主语啊?问我就告诉你:EU)。所以如果两条汇编语句的动宾(指令和数据部分)全相同,则他们的二进制代码也就完全相同
。这是以前在C51上亲自进行汇编语句到机器语句的手工翻译时所遵循的规律。因为C51上没有关于栈的操作,所以抱歉的说:
没有push指令方面的具体的翻译经验可以讨论。也无法直接回答你关于push指令不同的问题。但是现在我们参考Intel公司的指
令格式和编码来做做80×86指令系统的试验,先来看看两条关于堆栈操作(push ax)和立即数(mov
ax,1234)操作指令的编码格式来窥窥汇编语句到二进制代码转换的过程,以理解不同语句与其二进制代码的关系:
1。压栈:
PUSH
register 1111 1111 : 11 110 reg
register (alternate encoding) 0101 0 reg
2。弹栈:
POP
register 1000 1111 : 11 000 reg
register (alternate encoding) 0101 1 reg
3。立即数操作:
immediate to register 1100 011w : 11 000 reg : immediate data
immediate to register (alternate encoding) 1011 w reg : immediate data
4。寄存器域:
reg w=0 w=1 reg w=0 w=1
000 AL AX 000 AL EAX
011 BL BX 011 BL EBX
可以看出来Intel本身对同一指令都有两种不同的编码格式,但是无论我们选择哪一种格式编码,得到的二进制结果虽然不一样
,但是执行的结果却是一样的。好了,我们来段简单的汇编语句:
mov ax,1234
push ax
pop bx
我们先来手工翻译一下:
Mov ax,1234指令有两种翻译方法:
汇编语句 ——> 二进制代码 ——> 16进制代码
法一:Mov ax,1234 ——> 11 000 000 1234 ——> C0 1234
法二:Mov ax,1234 ——> 1011 1 000 1234 ——> B8 1234
Push ax也有两种翻译方法:
汇编语句 ——> 二进制代码 ——> 16进制代码
法一:push ax ——> 1111 1111:11 110 000 ——> FF:F0
法二:push ax ——> 0101 0 000 ——> 50
Pop bx也有两种翻译方法:
汇编语句 ——> 二进制代码 ——> 16进制代码
法一:Pop bx ——> 1000 1111:11 000 011 ——> 8F:C3
法二:Pop bx ——> 0101 1 011 ——> 5B
那么根据我们的手工译码有两套方案:
方案一:
mov ax,1234 ——> C01234
push ax ——> FF:F0
pop bx ——> 8F:C3
方案二:
mov ax,1234 ——> B81234
push ax ——> 50
pop bx ——> 5B
[CODE]
-a
148E:0100 mov ax,1234
148E:0103 push ax
148E:0104 pop bx
148E:0105
-u 100
148E:0100 [COLOR=red]B83412[/COLOR] MOV AX,1234
;怎么样??和我们手工翻译的第二套方案一模一样吧。/:P
148E:0103 [COLOR=red]50[/COLOR] PUSH AX ;还真是一点都不假呢!
148E:0104 [COLOR=red]5B[/COLOR] POP BX ;真的呢!
-r
AX=0000 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=148E ES=148E SS=148E CS=148E IP=0100 NV UP EI PL NZ NA PO NC
148E:0100 B83412 MOV AX,1234
;为了验证正确性,再来执行一下??注意红色部分的变化
[COLOR=red]
-g 103
[/COLOR]
[COLOR=red]AX=1234[/COLOR] BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=148E ES=148E SS=148E CS=148E IP=0103 NV UP EI PL NZ NA PO NC
148E:0103 50 PUSH AX
[COLOR=red]
-g 104
[/COLOR]
AX=1234 BX=0000 CX=0000 DX=0000 [COLOR=red]SP=FFEC[/COLOR] BP=0000 SI=0000 DI=0000
DS=148E ES=148E SS=148E CS=148E IP=0104 NV UP EI PL NZ NA PO NC
148E:0104 5B POP BX
[COLOR=red]
-g 105
[/COLOR]
AX=1234 [COLOR=red]BX=1234[/COLOR] CX=0000 DX=0000 [COLOR=red]SP=FFEE[/COLOR] BP=0000 SI=0000 DI=0000
DS=148E ES=148E SS=148E CS=148E IP=0105 NV UP EI PL NZ NA PO NC
148E:0105 0000 ADD [BX+SI],AL DS:1234=00
[/CODE]
最后三条红色部分跟踪语句可以换成(t命令,更显专业):
[CODE]
[COLOR=red]
-t
[/COLOR]
[COLOR=red]AX=1234[/COLOR] BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=148E ES=148E SS=148E CS=148E IP=0103 NV UP EI PL NZ NA PO NC
148E:0103 50 PUSH AX
[COLOR=red]
-t
[/COLOR]
AX=1234 BX=0000 CX=0000 DX=0000 [COLOR=red]SP=FFEC[/COLOR] BP=0000 SI=0000 DI=0000
DS=148E ES=148E SS=148E CS=148E IP=0104 NV UP EI PL NZ NA PO NC
148E:0104 5B POP BX
[COLOR=red]
-t
[/COLOR]
AX=1234 [COLOR=red]BX=1234[/COLOR] CX=0000 DX=0000 [COLOR=red]SP=FFEE[/COLOR] BP=0000 SI=0000 DI=0000
DS=148E ES=148E SS=148E CS=148E IP=0105 NV UP EI PL NZ NA PO NC
148E:0105 0000 ADD [BX+SI],AL DS:1234=00
[/CODE]
写完了这些,基本上可以回答霜泉兄的问题吧,/:P.
大家看完了,如果我也写清楚到大家那个完全理解的地步了的话,不知道兄弟们是不是有种想写编译器的冲动啊?呵呵。其实
涉及的东西还远不止这些呢!
getsernum得到的序列号怎么和dir的不一样呢?