醉卧沙场君莫笑 古来征战几人回
RSS icon Email icon Home icon
  • masm造weak symbol

    Posted on 四月 24th, 2009 admin No comments

    masm或ml.exe可以用alias造weak external symbol,这样可以起到链接时有就选用户提供的,无就选系统默认的这样一个功能。这个语法很简单,但不好找。以前找了又忘了,特记下:

    alias <sym2> = <sym1>

    这次是在这里搜到的:

    http://rs1.szif.hu/~tomcat/win32/win32asm.txt

  • php和mysql支持utf8

    Posted on 四月 15th, 2009 admin No comments

    老生常谈了,网上很多文,我再多写一篇!

    1. my.cnf里加上:
    [client]
    default-character-set=utf8

    [mysqld]
    default-character-set=utf8

    重启mysqld,连上去看看:

    mysql> SHOW VARIABLES LIKE '%character%';SHOW VARIABLES LIKE 'collation%'; +--------------------------+----------------------------+ | Variable_name            | Value                      | +--------------------------+----------------------------+ | character_set_client     | utf8                       | | character_set_connection | utf8                       | | character_set_database   | utf8                       | | character_set_filesystem | binary                     | | character_set_results    | utf8                       | | character_set_server     | utf8                       | | character_set_system     | utf8                       | | character_sets_dir       | /usr/share/mysql/charsets/ | +--------------------------+----------------------------+ 8 rows in set (0.00 sec) +----------------------+-----------------+ | Variable_name        | Value           | +----------------------+-----------------+ | collation_connection | utf8_general_ci | | collation_database   | utf8_general_ci | | collation_server     | utf8_general_ci | +----------------------+-----------------+ 3 rows in set (0.00 sec)

    2. php里也要改,写个函数:

    <?php function connect_db($dbname) {  global $mysql_addr, $mysql_user, $mysql_pass;  $dbcon = mysql_connect($mysql_addr, $mysql_user, $mysql_pass);  mysql_query("SET NAMES 'utf8'; SET CHARACTER_SET_CLIENT=utf8; " ."SET CHARACTER_SET_RESULTS=utf8; ", $dbcon);  if ($dbname)  {   mysql_select_db($dbname, $dbcon);  }  return $dbcon; } ?>

    3. 数据库可以改一下:

    alter database mydb CHARACTER SET  ‘utf8′ ;      

    alter table tablename CHARACTER SET ‘utf8′;

    不过这两句不会改内容,如果内容原来不是utf8的字节,就要导出导入了.

  • 修改了一个setacl的BUG

    Posted on 四月 7th, 2009 admin No comments

    setacl在处理注册表时有问题,写得不对。修改如下:

    csetacl.cpp:

    --- CSetACL.cpp.old     2009-04-06 23:44:41.000000000 +0800 +++ CSetACL.cpp 2009-04-06 23:57:16.000000000 +0800 @@ -2288,7 +2288,7 @@         m_nAPIError                     =       RegOpenKeyEx (hRemoteKey ? hRemoteKey : hMainKey,  sSubkeyPath, 0, KEY_ENUMERATE_SUB_KEYS | KEY_EXECUTE, &hOpenStd);           // We now know the key exists. Let's try some black magic and open it like a backup program -       if (hOpenStd && (m_nAPIError == ERROR_SUCCESS || m_nAPIError == ERROR_ACCESS_DENIED)) +       if (hOpenStd || m_nAPIError == ERROR_ACCESS_DENIED)         {                 DWORD   nNewCreated     =       0;                 DWORD nErrTmp   =       0; @@ -2307,6 +2307,7 @@                 if (hOpenBckp && nErrTmp == ERROR_SUCCESS)                 {                         *hSubKey                =       hOpenBckp; +                       m_nAPIError = ERROR_SUCCESS;                           // The standard key is not needed                         RegCloseKey (hOpenStd);

    新exe在这里.

    设置注册表权限方法:

    setacl -ot reg -on HKEY_LOCAL_MACHINE\aaaa\hehe  -rec yes  -actn setowner  -ownr n:Administrators -actn clear -clr dacl -actn setprot -op dacl:np

  • 使hdtune扫硬盘时可以从某个位置开始

    Posted on 四月 4th, 2009 admin No comments

    hdtune扫硬盘坏道,很慢。为了让它可以从某个位置开始,调了一下:

    004089F5                            . 57                      PUSH EDI                                 ; /lParam 004089F6 <blockpos>                 . 8B7C24 1C               MOV EDI,DWORD PTR SS:[ESP+1C]            ; | 004089FA                            . 8946 1A                 MOV DWORD PTR DS:[ESI+1A],EAX            ; | 004089FD                            . 57                      PUSH EDI                                 ; |wParam 004089FE                            . 68 0E040000             PUSH 40E                                 ; |Message = WM_USER+14. 00408A03                            . 51                      PUSH ECX                                 ; |hWnd 00408A04                            . FF15 FC964700           CALL DWORD PTR DS:[4796FC]               ; \SendMessageA

     在 blockpos处,修改esp+1c里的值,就可以了。

    总的来说,hdtune把硬盘分为很多个格子,每行50个,总共有很多行。每一个小格扫完后,就发送这个自定义的消息 WM_USER+14来通知主线程画一个色块。绿色表示无问题,红色表示有问题。运行到blockpos这一行时,把这个值改掉,即可定义到第n个格子。第0个为左上,第49个为第一行最后一个,依此类推。