LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 687|回复: 2

函数调用参数传递的问题

[复制链接]
发表于 2009-5-3 21:51:24 | 显示全部楼层 |阅读模式
也就是
        guint8* output = NULL;
        output = (guint8*) g_malloc0 (0x20);

        guint8 output[ 0x20 ];  

的不同?


  1. int main()
  2. {
  3.         guint8 input[] = {0x10, 0xf3, 0x07, 0xb7, 0x12, 0x4d, 0x06, 0x9b, 0x31, 0xc9, 0xf0, 0x00, 0x87, 0x43,
  4.         0x1a, 0x67, 0xc0, 0x7f, 0x9e, 0x2c, 0x13, 0xb3, 0x90, 0x14, 0xd0, 0x91, 0xe4, 0x09, 0x5a, 0x6e, 0xdf, 0x21};
  5.         guint8 key[] = {0xd7, 0x87, 0x7e, 0xf4, 0x2e, 0x9e, 0x26, 0x77, 0x76, 0x94, 0x1e, 0x42, 0x3c, 0x0f, 0x81, 0xd6};
  6.         guint8* output = NULL;
  7.         output = g_malloc0( 0x20);
  8.         guint16 output_len = qq_decrypt(output, input, 0x20, key);
  9.         g_print ("OUTPUT_LEN = %d\n",output_len);
  10. }

  11. [red]运行错误[/red]
  12. ---------------------------------------
  13. int main()
  14. {
  15.         guint8 input[] = {0x10, 0xf3, 0x07, 0xb7, 0x12, 0x4d, 0x06, 0x9b, 0x31, 0xc9, 0xf0, 0x00, 0x87, 0x43,
  16.         0x1a, 0x67, 0xc0, 0x7f, 0x9e, 0x2c, 0x13, 0xb3, 0x90, 0x14, 0xd0, 0x91, 0xe4, 0x09, 0x5a, 0x6e, 0xdf, 0x21};
  17.         guint8 key[] = {0xd7, 0x87, 0x7e, 0xf4, 0x2e, 0x9e, 0x26, 0x77, 0x76, 0x94, 0x1e, 0x42, 0x3c, 0x0f, 0x81, 0xd6};
  18.         guint8 output[sizeof (input)];
  19.         guint16 output_len = qq_decrypt(output, input, 0x20, key);
  20.         g_print ("OUTPUT_LEN = %d\n",output_len);
  21. }
  22. [red]运行正常[/red]
复制代码


qq_crypt 定义:
gint qq_decrypt(guint8 *plain, const guint8* const crypted, const gint crypted_len, const guint8* const key)
发表于 2009-5-4 02:11:06 | 显示全部楼层
試試這個:


  1. --- libpurple/protocols/qq/qq_crypt.c   cbc1c094ddb46b157dbc6d3a713fa879a941352b
  2. +++ libpurple/protocols/qq/qq_crypt.c   9e92a6a638bbb2b9b206b7bf17f2becd15baea86
  3. @@ -275,7 +275,7 @@ static inline gint decrypt_out(guint8 *d
  4.         }

  5.         count64 = crypted_len / 8;
  6. -       while (count64-- > 0){
  7. +       while (--count64 > 0){
  8.                 c32_prev[0] = crypted32[0]; c32_prev[1] = crypted32[1];
  9.                 crypted_ptr += 8;

复制代码
回复 支持 反对

使用道具 举报

发表于 2009-5-4 10:10:44 | 显示全部楼层
两段代码唯一的差别就是g_malloc0在分配内存后把内存都置0了,用malloc分配内存试试,qq_decrypt内部可能以0为结尾来计算ouput的长度。以上只是猜测。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表