免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1602 | 回复: 5
打印 上一主题 下一主题

【求助】匹配一个C文件 的函数列表 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-11-17 11:54 |只看该作者 |倒序浏览
本帖最后由 plp626 于 2012-11-17 11:56 编辑

这是一个md5.c的C代码文件,
匹配结果:
static void byteReverse(unsigned char *buf, unsigned longs)
void MD5Init(MD5_CTX *ctx)
static void MD5Transform(uint32_t buf[4], uint32_t const in[16])
void MD5Update(MD5_CTX *ctx, unsigned char const *buf, unsigned len)
void MD5Final(unsigned char digest[16], MD5_CTX *ctx)
  1. /*
  2. * This code implements the MD5 message-digest algorithm.
  3. * The algorithm is due to Ron Rivest.  This code was
  4. * written by Colin Plumb in 1993, no copyright is claimed.
  5. * This code is in the public domain; do with it what you wish.
  6. *
  7. * Equivalent code is available from RSA Data Security, Inc.
  8. * This code has been tested against that, and is equivalent,
  9. * except that you don't need to include two pages of legalese
  10. * with every copy.
  11. *
  12. * To compute the message digest of a chunk of bytes, declare an
  13. * MD5Context structure, pass it to MD5Init, call MD5Update as
  14. * needed on buffers full of bytes, and then call MD5Final, which
  15. * will fill a supplied 16-byte array with the digest.
  16. */

  17. #include "defs.h"

  18. #ifndef HAVE_MD5
  19. #if __BYTE_ORDER == 1234
  20. #define byteReverse(buf, len)        /* Nothing */
  21. #else
  22. /*
  23. * Note: this code is harmless on little-endian machines.
  24. */
  25. static void byteReverse(unsigned char *buf, unsigned longs)
  26. {
  27.         uint32_t t;
  28.         do {
  29.                 t = (uint32_t) ((unsigned) buf[3] << 8 | buf[2]) << 16 |
  30.                         ((unsigned) buf[1] << 8 | buf[0]);
  31.                 *(uint32_t *) buf = t;
  32.                 buf += 4;
  33.         } while (--longs);
  34. }
  35. #endif /* __BYTE_ORDER */

  36. /* The four core functions - F1 is optimized somewhat */

  37. /* #define F1(x, y, z) (x & y | ~x & z) */
  38. #define F1(x, y, z) (z ^ (x & (y ^ z)))
  39. #define F2(x, y, z) F1(z, x, y)
  40. #define F3(x, y, z) (x ^ y ^ z)
  41. #define F4(x, y, z) (y ^ (x | ~z))

  42. /* This is the central step in the MD5 algorithm. */
  43. #define MD5STEP(f, w, x, y, z, data, s) \
  44. ( w += f(x, y, z) + data,  w = w<<s | w>>(32-s),  w += x )

  45. /*
  46. * Start MD5 accumulation.  Set bit count to 0 and buffer to mysterious
  47. * initialization constants.
  48. */
  49. void MD5Init(MD5_CTX *ctx)
  50. {
  51.         ctx->buf[0] = 0x67452301;
  52.         ctx->buf[1] = 0xefcdab89;
  53.         ctx->buf[2] = 0x98badcfe;
  54.         ctx->buf[3] = 0x10325476;

  55.         ctx->bits[0] = 0;
  56.         ctx->bits[1] = 0;
  57. }

  58. /*
  59. * The core of the MD5 algorithm, this alters an existing MD5 hash to
  60. * reflect the addition of 16 longwords of new data.  MD5Update blocks
  61. * the data and converts bytes into longwords for this routine.
  62. */
  63. static void MD5Transform(uint32_t buf[4], uint32_t const in[16])
  64. {
  65.         register uint32_t a, b, c, d;

  66.         a = buf[0];
  67.         b = buf[1];
  68.         c = buf[2];
  69.         d = buf[3];

  70.         MD5STEP(F1, a, b, c, d, in[0] + 0xd76aa478, 7);
  71.         MD5STEP(F1, d, a, b, c, in[1] + 0xe8c7b756, 12);
  72.         MD5STEP(F1, c, d, a, b, in[2] + 0x242070db, 17);
  73.         MD5STEP(F1, b, c, d, a, in[3] + 0xc1bdceee, 22);
  74.         MD5STEP(F1, a, b, c, d, in[4] + 0xf57c0faf, 7);
  75.         MD5STEP(F1, d, a, b, c, in[5] + 0x4787c62a, 12);
  76.         MD5STEP(F1, c, d, a, b, in[6] + 0xa8304613, 17);
  77.         MD5STEP(F1, b, c, d, a, in[7] + 0xfd469501, 22);
  78.         MD5STEP(F1, a, b, c, d, in[8] + 0x698098d8, 7);
  79.         MD5STEP(F1, d, a, b, c, in[9] + 0x8b44f7af, 12);
  80.         MD5STEP(F1, c, d, a, b, in[10] + 0xffff5bb1, 17);
  81.         MD5STEP(F1, b, c, d, a, in[11] + 0x895cd7be, 22);
  82.         MD5STEP(F1, a, b, c, d, in[12] + 0x6b901122, 7);
  83.         MD5STEP(F1, d, a, b, c, in[13] + 0xfd987193, 12);
  84.         MD5STEP(F1, c, d, a, b, in[14] + 0xa679438e, 17);
  85.         MD5STEP(F1, b, c, d, a, in[15] + 0x49b40821, 22);

  86.         MD5STEP(F2, a, b, c, d, in[1] + 0xf61e2562, 5);
  87.         MD5STEP(F2, d, a, b, c, in[6] + 0xc040b340, 9);
  88.         MD5STEP(F2, c, d, a, b, in[11] + 0x265e5a51, 14);
  89.         MD5STEP(F2, b, c, d, a, in[0] + 0xe9b6c7aa, 20);
  90.         MD5STEP(F2, a, b, c, d, in[5] + 0xd62f105d, 5);
  91.         MD5STEP(F2, d, a, b, c, in[10] + 0x02441453, 9);
  92.         MD5STEP(F2, c, d, a, b, in[15] + 0xd8a1e681, 14);
  93.         MD5STEP(F2, b, c, d, a, in[4] + 0xe7d3fbc8, 20);
  94.         MD5STEP(F2, a, b, c, d, in[9] + 0x21e1cde6, 5);
  95.         MD5STEP(F2, d, a, b, c, in[14] + 0xc33707d6, 9);
  96.         MD5STEP(F2, c, d, a, b, in[3] + 0xf4d50d87, 14);
  97.         MD5STEP(F2, b, c, d, a, in[8] + 0x455a14ed, 20);
  98.         MD5STEP(F2, a, b, c, d, in[13] + 0xa9e3e905, 5);
  99.         MD5STEP(F2, d, a, b, c, in[2] + 0xfcefa3f8, 9);
  100.         MD5STEP(F2, c, d, a, b, in[7] + 0x676f02d9, 14);
  101.         MD5STEP(F2, b, c, d, a, in[12] + 0x8d2a4c8a, 20);

  102.         MD5STEP(F3, a, b, c, d, in[5] + 0xfffa3942, 4);
  103.         MD5STEP(F3, d, a, b, c, in[8] + 0x8771f681, 11);
  104.         MD5STEP(F3, c, d, a, b, in[11] + 0x6d9d6122, 16);
  105.         MD5STEP(F3, b, c, d, a, in[14] + 0xfde5380c, 23);
  106.         MD5STEP(F3, a, b, c, d, in[1] + 0xa4beea44, 4);
  107.         MD5STEP(F3, d, a, b, c, in[4] + 0x4bdecfa9, 11);
  108.         MD5STEP(F3, c, d, a, b, in[7] + 0xf6bb4b60, 16);
  109.         MD5STEP(F3, b, c, d, a, in[10] + 0xbebfbc70, 23);
  110.         MD5STEP(F3, a, b, c, d, in[13] + 0x289b7ec6, 4);
  111.         MD5STEP(F3, d, a, b, c, in[0] + 0xeaa127fa, 11);
  112.         MD5STEP(F3, c, d, a, b, in[3] + 0xd4ef3085, 16);
  113.         MD5STEP(F3, b, c, d, a, in[6] + 0x04881d05, 23);
  114.         MD5STEP(F3, a, b, c, d, in[9] + 0xd9d4d039, 4);
  115.         MD5STEP(F3, d, a, b, c, in[12] + 0xe6db99e5, 11);
  116.         MD5STEP(F3, c, d, a, b, in[15] + 0x1fa27cf8, 16);
  117.         MD5STEP(F3, b, c, d, a, in[2] + 0xc4ac5665, 23);

  118.         MD5STEP(F4, a, b, c, d, in[0] + 0xf4292244, 6);
  119.         MD5STEP(F4, d, a, b, c, in[7] + 0x432aff97, 10);
  120.         MD5STEP(F4, c, d, a, b, in[14] + 0xab9423a7, 15);
  121.         MD5STEP(F4, b, c, d, a, in[5] + 0xfc93a039, 21);
  122.         MD5STEP(F4, a, b, c, d, in[12] + 0x655b59c3, 6);
  123.         MD5STEP(F4, d, a, b, c, in[3] + 0x8f0ccc92, 10);
  124.         MD5STEP(F4, c, d, a, b, in[10] + 0xffeff47d, 15);
  125.         MD5STEP(F4, b, c, d, a, in[1] + 0x85845dd1, 21);
  126.         MD5STEP(F4, a, b, c, d, in[8] + 0x6fa87e4f, 6);
  127.         MD5STEP(F4, d, a, b, c, in[15] + 0xfe2ce6e0, 10);
  128.         MD5STEP(F4, c, d, a, b, in[6] + 0xa3014314, 15);
  129.         MD5STEP(F4, b, c, d, a, in[13] + 0x4e0811a1, 21);
  130.         MD5STEP(F4, a, b, c, d, in[4] + 0xf7537e82, 6);
  131.         MD5STEP(F4, d, a, b, c, in[11] + 0xbd3af235, 10);
  132.         MD5STEP(F4, c, d, a, b, in[2] + 0x2ad7d2bb, 15);
  133.         MD5STEP(F4, b, c, d, a, in[9] + 0xeb86d391, 21);

  134.         buf[0] += a;
  135.         buf[1] += b;
  136.         buf[2] += c;
  137.         buf[3] += d;
  138. }

  139. /*
  140. * Update context to reflect the concatenation of another buffer full
  141. * of bytes.
  142. */
  143. void
  144. MD5Update(MD5_CTX *ctx,
  145.                  unsigned char const *buf,
  146.                  unsigned len)
  147. {
  148.         uint32_t t;

  149.         /* Update bitcount */

  150.         t = ctx->bits[0];
  151.         if ((ctx->bits[0] = t + ((uint32_t) len << 3)) < t)
  152.                 ctx->bits[1]++;                /* Carry from low to high */
  153.         ctx->bits[1] += len >> 29;

  154.         t = (t >> 3) & 0x3f;        /* Bytes already in shsInfo->data */

  155.         /* Handle any leading odd-sized chunks */

  156.         if (t) {
  157.                 unsigned char *p = (unsigned char *) ctx->in + t;

  158.                 t = 64 - t;
  159.                 if (len < t) {
  160.                         memcpy(p, buf, len);
  161.                         return;
  162.                 }
  163.                 memcpy(p, buf, t);
  164.                 byteReverse(ctx->in, 16);
  165.                 MD5Transform(ctx->buf, (uint32_t *) ctx->in);
  166.                 buf += t;
  167.                 len -= t;
  168.         }
  169.         /* Process data in 64-byte chunks */

  170.         while (len >= 64) {
  171.                 memcpy(ctx->in, buf, 64);
  172.                 byteReverse(ctx->in, 16);
  173.                 MD5Transform(ctx->buf, (uint32_t *) ctx->in);
  174.                 buf += 64;
  175.                 len -= 64;
  176.         }

  177.         /* Handle any remaining bytes of data. */

  178.         memcpy(ctx->in, buf, len);
  179. }

  180. /*
  181. * Final wrapup - pad to 64-byte boundary with the bit pattern
  182. * 1 0* (64-bit count of bits processed, MSB-first)
  183. */
  184. void
  185. MD5Final(unsigned char digest[16], MD5_CTX *ctx) // do what?
  186. {
  187.         unsigned count;
  188.         unsigned char *p;

  189.         /* Compute number of bytes mod 64 */
  190.         count = (ctx->bits[0] >> 3) & 0x3F;

  191.         /* Set the first char of padding to 0x80.  This is safe since there is
  192.            always at least one byte free */
  193.         p = ctx->in + count;
  194.         *p++ = 0x80;

  195.         /* Bytes of padding needed to make 64 bytes */
  196.         count = 64 - 1 - count;

  197.         /* Pad out to 56 mod 64 */
  198.         if (count < 8) {
  199.                 /* Two lots of padding:  Pad the first block to 64 bytes */
  200.                 memset(p, 0, count);
  201.                 byteReverse(ctx->in, 16);
  202.                 MD5Transform(ctx->buf, (uint32_t *) ctx->in);

  203.                 /* Now fill the next block with 56 bytes */
  204.                 memset(ctx->in, 0, 56);
  205.         } else {
  206.                 /* Pad block to 56 bytes */
  207.                 memset(p, 0, count - 8);
  208.         }
  209.         byteReverse(ctx->in, 14);

  210.         /* Append length in bits and transform */
  211.         ((uint32_t *) ctx->in)[14] = ctx->bits[0];
  212.         ((uint32_t *) ctx->in)[15] = ctx->bits[1];

  213.         MD5Transform(ctx->buf, (uint32_t *) ctx->in);
  214.         byteReverse((unsigned char *) ctx->buf, 4);
  215.         memcpy(digest, ctx->buf, 16);
  216.         memset((char *) ctx, 0, sizeof(ctx));        /* In case it's sensitive */
  217. }

  218. #endif /* !HAVE_MD5 */
复制代码

论坛徽章:
7
戌狗
日期:2013-12-15 20:43:38技术图书徽章
日期:2014-03-05 01:33:12技术图书徽章
日期:2014-03-15 20:31:17未羊
日期:2014-03-25 23:48:20丑牛
日期:2014-04-07 22:37:44巳蛇
日期:2014-04-11 21:58:0915-16赛季CBA联赛之青岛
日期:2016-03-17 20:36:13
2 [报告]
发表于 2012-11-17 18:00 |只看该作者
  1. #!/usr/bin/perl
  2. use 5.016;
  3. my $s = do {local $/; <DATA>};
  4. while ($s =~ /^((?:static|void).*?\))/msg){
  5.         my $p = $1;
  6.         $p =~ s/\n/ /g;
  7.         say $p;
  8. }
  9. __DATA__
  10. /*
  11. * This code implements the MD5 message-digest algorithm.
  12. * The algorithm is due to Ron Rivest.  This code was
  13. .
  14. .
复制代码

论坛徽章:
0
3 [报告]
发表于 2012-11-17 19:37 |只看该作者
回复 2# rubyish


    我的perl是5.6版本的,运行你的代码什么也没输出。。

论坛徽章:
7
戌狗
日期:2013-12-15 20:43:38技术图书徽章
日期:2014-03-05 01:33:12技术图书徽章
日期:2014-03-15 20:31:17未羊
日期:2014-03-25 23:48:20丑牛
日期:2014-04-07 22:37:44巳蛇
日期:2014-04-11 21:58:0915-16赛季CBA联赛之青岛
日期:2016-03-17 20:36:13
4 [报告]
发表于 2012-11-18 07:57 |只看该作者
回复 3# plp626
  1. #!/usr/bin/perl
  2. open my $m, 'md5.c';
  3. my $s = do { local $/; <$m> };
  4. while ( $s =~ /^((?:static|void).*?\))/msg ) {
  5.     my $p = $1;
  6.     $p =~ s/\n/ /g;
  7.     print $p, $/;
  8. }
复制代码

论坛徽章:
0
5 [报告]
发表于 2012-11-18 10:34 |只看该作者
本帖最后由 plp626 于 2012-11-18 10:34 编辑

两个代码一样,不过我找到原因了,谢     谢;

论坛徽章:
0
6 [报告]
发表于 2012-11-18 12:24 |只看该作者
什么原因,说说?能用Perl 5.6 的系统,一定是古董级的电脑。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP