首页
社区
课程
招聘
[求助]DynamoRIO 的 drcov 覆盖率统计工具,只能统计主程序的代码覆盖率吗?
发表于: 2019-11-12 17:13 7297

[求助]DynamoRIO 的 drcov 覆盖率统计工具,只能统计主程序的代码覆盖率吗?

2019-11-12 17:13
7297
我想统计某个dll 的覆盖率,但是好像没有效果。官方文档也没有提供指定dll 的参数,怎么办?是不是我遗漏了什么?

-------------------------------------------------------
看了一下drcov 的源码,drcov 的参数处理函数如下:
static void
options_init(client_id_t id, int argc, const char *argv[], drcovlib_options_t *ops)
{
    int i;
    const char *token;
    /* default values */
    nudge_kills = true;

    for (i = 1 /*skip client*/; i < argc; i++) {
        token = argv[i];
        if (strcmp(token, "-dump_text") == 0)
            ops->flags |= DRCOVLIB_DUMP_AS_TEXT;
        else if (strcmp(token, "-dump_binary") == 0)
            ops->flags &= ~DRCOVLIB_DUMP_AS_TEXT;
        else if (strcmp(token, "-no_nudge_kills") == 0)
            nudge_kills = false;
        else if (strcmp(token, "-nudge_kills") == 0)
            nudge_kills = true;
        else if (strcmp(token, "-logdir") == 0) {
            USAGE_CHECK((i + 1) < argc, "missing logdir path");
            ops->logdir = argv[++i];
        } else if (strcmp(token, "-logprefix") == 0) {
            USAGE_CHECK((i + 1) < argc, "missing logprefix string");
            ops->logprefix = argv[++i];
        } else if (strcmp(token, "-native_until_thread") == 0) {
            USAGE_CHECK((i + 1) < argc, "missing -native_until_thread number");
            token = argv[++i];
            if (dr_sscanf(token, "%d", &ops->native_until_thread) != 1 ||
                ops->native_until_thread < 0) {
                ops->native_until_thread = 0;
                USAGE_CHECK(false, "invalid -native_until_thread number");
            }
        } else if (strcmp(token, "-verbose") == 0) {
            /* XXX: should drcovlib expose its internal verbose param? */
            USAGE_CHECK((i + 1) < argc, "missing -verbose number");
            token = argv[++i];
            if (dr_sscanf(token, "%u", &verbose) != 1) {
                USAGE_CHECK(false, "invalid -verbose number");
            }
        } else {
            NOTIFY(0, "UNRECOGNIZED OPTION: \"%s\"\n", token);
            USAGE_CHECK(false, "invalid option");
        }
    }
    if (dr_using_all_private_caches())
        ops->flags |= DRCOVLIB_THREAD_PRIVATE;
}
可以看到,没有特殊的指定模块的参数,那有没有可能是 drcov 统计了所有模块的覆盖率?

我利用 drcov 的   dump_text 参数,将日志输出为txt格式,如下:
DRCOV VERSION: 2
DRCOV FLAVOR: drcov
Module Table: version 4, count 72
Columns: id, containing_id, start, end, entry, offset, checksum, timestamp, path
  0,   0, 0x008e0000, 0x00b5a000, 0x008e1390, 000002e41aa6ec30, 0x00278177, 0x5d41fdde,  C:\Program Files (x86)\Adobe\Acrobat Reader DC\Reader\AcroRd32.exe
  1,   1, 0x5df00000, 0x5e05a000, 0x5df7f0a0, 000002e41aa6ec30, 0x00135357, 0x5d607a2c,  D:\Work\DynamoRIO-Windows-7.91.18130-0\lib32\release\dynamorio.dll
  2,   2, 0x5e060000, 0x5e2b1000, 0x5e090e60, 000002e41aa6ec30, 0x0024d4dc, 0x12130009,  C:\Windows\SYSTEM32\AcGenral.DLL
  3,   3, 0x5e8a0000, 0x5e8ab000, 0x5e8a0000, 000002e41aa6ec30, 0x000129db, 0x5d607a2f,  D:\Work\DynamoRIO-Windows-7.91.18130-0\ext\lib32\release/drmgr.dll
  4,   4, 0x5e8b0000, 0x5e8ba000, 0x5e8b0000, 000002e41aa6ec30, 0x0000f2d6, 0x5d607a5f,  D:\Work\DynamoRIO-Windows-7.91.18130-0\ext\lib32\release/drreg.dll
  5,   5, 0x60820000, 0x6082a000, 0x60820000, 000002e41aa6ec30, 0x0000c63a, 0x5d607a60,  D:\Work\DynamoRIO-Windows-7.91.18130-0\ext\lib32\release/drx.dll
  6,   6, 0x69940000, 0x69948000, 0x69940000, 000002e41aa6ec30, 0x0000be2b, 0x5d607a71,  D:\Work\DynamoRIO-Windows-7.91.18130-0\ext\lib32\release/drcovlib.dll
  7,   7, 0x69a30000, 0x69a49000, 0x69a34420, 000002e41aa6ec30, 0x0001c8ca, 0x12e93bb1,  C:\Windows\SYSTEM32\MSACM32.dll
  8,   8, 0x6a770000, 0x6a776000, 0x6a770000, 000002e41aa6ec30, 0x0000f488, 0x5d607a71,  D:\Work\DynamoRIO-Windows-7.91.18130-0\tools\lib32\release\drcov.dll
  9,   9, 0x6a9c0000, 0x6aa5f000, 0x6a9f8cd0, 000002e41aa6ec30, 0x000a83e3, 0x9664ad4d,  C:\Windows\SYSTEM32\apphelp.dll
 10,  10, 0x6aff0000, 0x6b005000, 0x6aff5980, 000002e41aa6ec30, 0x0001bb20, 0x1ebda4a7,  C:\Windows\SYSTEM32\samcli.dll
 11,  11, 0x70de0000, 0x71009000, 0x70f98bc0, 000002e41aa6ec30, 0x0022bfc2, 0xa21a6d5f,  C:\Windows\SYSTEM32\iertutil.dll
 12,  12, 0x71010000, 0x71035000, 0x71015290, 000002e41aa6ec30, 0x0002ea53, 0xb9a3996d,  C:\Windows\SYSTEM32\dwmapi.dll
 13,  13, 0x71040000, 0x710ba000, 0x7107b380, 000002e41aa6ec30, 0x0007bd52, 0x1f55c6f7,  C:\Windows\SYSTEM32\UxTheme.dll
 14,  14, 0x71210000, 0x712d5000, 0x712788e0, 000002e41aa6ec30, 0x000ce8f4, 0xb76a2d7b,  C:\Windows\SYSTEM32\PROPSYS.dll
 15,  15, 0x712e0000, 0x71303000, 0x712e87e0, 000002e41aa6ec30, 0x00022845, 0xbd75c031,  C:\Windows\SYSTEM32\WINMMBASE.dll
 16,  16, 0x71580000, 0x71598000, 0x71583490, 000002e41aa6ec30, 0x00021155, 0x0189f9ec,  C:\Windows\SYSTEM32\MPR.dll
 17,  17, 0x715a0000, 0x7174b000, 0x716252a0, 000002e41aa6ec30, 0x001aaa99, 0xeb24c01e,  C:\Windows\SYSTEM32\urlmon.dll
 18,  18, 0x71d30000, 0x71d54000, 0x71d34350, 000002e41aa6ec30, 0x0002dd98, 0xb3433693,  C:\Windows\SYSTEM32\WINMM.dll
 19,  19, 0x72e30000, 0x72e9b000, 0x72e44050, 000002e41aa6ec30, 0x0006663e, 0xa42cbc69,  C:\Windows\SYSTEM32\WINSPOOL.DRV
 20,  20, 0x749c0000, 0x749de000, 0x749c73f0, 000002e41aa6ec30, 0x00021339, 0x396650ce,  C:\Windows\SYSTEM32\USERENV.dll
 21,  21, 0x74a70000, 0x74a78000, 0x74a717f0, 000002e41aa6ec30, 0x0000d7f2, 0xfdb2b236,  C:\Windows\SYSTEM32\VERSION.dll
 22,  22, 0x74a80000, 0x74ab2000, 0x74a8c320, 000002e41aa6ec30, 0x000346c5, 0xd03b82f4,  C:\Windows\SYSTEM32\IPHLPAPI.DLL
 23,  23, 0x74e50000, 0x74e5a000, 0x74e52a40, 000002e41aa6ec30, 0x000080b5, 0x5218d924,  C:\Windows\System32\CRYPTBASE.dll
 24,  24, 0x74e60000, 0x74e80000, 0x74e6c970, 000002e41aa6ec30, 0x00021d45, 0x915e1a82,  C:\Windows\System32\SspiCli.dll
 25,  25, 0x74ed0000, 0x74fc7000, 0x74f0a0d0, 000002e41aa6ec30, 0x000feb75, 0x221a4640,  C:\Windows\System32\ole32.dll
 26,  26, 0x74fd0000, 0x75013000, 0x74fd6d40, 000002e41aa6ec30, 0x00048970, 0xf7e0ec6f,  C:\Windows\System32\powrprof.dll
 27,  27, 0x75020000, 0x75037000, 0x75020000, 000002e41aa6ec30, 0x0001759f, 0xaefa8751,  C:\Windows\System32\win32u.dll
 28,  28, 0x75040000, 0x75059000, 0x75049380, 000002e41aa6ec30, 0x00017bd1, 0x33b74ea2,  C:\Windows\System32\bcrypt.dll
 29,  29, 0x75060000, 0x7506d000, 0x75067450, 000002e41aa6ec30, 0x0000f5b8, 0x61a1f7cf,  C:\Windows\System32\UMPDC.dll
 30,  30, 0x75080000, 0x7519f000, 0x750a7670, 000002e41aa6ec30, 0x0012252b, 0x6dbf7eae,  C:\Windows\System32\ucrtbase.dll
 31,  31, 0x752a0000, 0x75316000, 0x752b2620, 000002e41aa6ec30, 0x0007a66d, 0x04c380b2,  C:\Windows\System32\sechost.dll
 32,  32, 0x75490000, 0x755ea000, 0x75550e50, 000002e41aa6ec30, 0x00163a87, 0x296a4ee5,  C:\Windows\System32\gdi32full.dll
 33,  33, 0x755f0000, 0x756d0000, 0x75605f70, 000002e41aa6ec30, 0x000a5f05, 0x7b5427ec,  C:\Windows\System32\KERNEL32.DLL
 34,  34, 0x75760000, 0x7579b000, 0x7576cf50, 000002e41aa6ec30, 0x0003dab8, 0xe4afe536,  C:\Windows\System32\cfgmgr32.dll
 35,  35, 0x757a0000, 0x7585f000, 0x757d5b00, 000002e41aa6ec30, 0x000c7868, 0x58bec60c,  C:\Windows\System32\msvcrt.dll
 36,  36, 0x75860000, 0x75e25000, 0x75a621c0, 000002e41aa6ec30, 0x005dafff, 0xaceeeb3d,  C:\Windows\System32\windows.storage.dll
 37,  37, 0x75e30000, 0x763aa000, 0x75f97c40, 000002e41aa6ec30, 0x0058f5de, 0xf3bb85b7,  C:\Windows\System32\SHELL32.dll
 38,  38, 0x763b0000, 0x76442000, 0x763e51a0, 000002e41aa6ec30, 0x000a0520, 0x1a1037f8,  C:\Windows\System32\OLEAUT32.dll
 39,  39, 0x76ad0000, 0x76ae3000, 0x76ad5d20, 000002e41aa6ec30, 0x000123c2, 0xfaf7cdeb,  C:\Windows\System32\cryptsp.dll
 40,  40, 0x76af0000, 0x76b11000, 0x76af4b50, 000002e41aa6ec30, 0x00020fce, 0x527faf7f,  C:\Windows\System32\GDI32.dll
 41,  41, 0x76b20000, 0x76b9c000, 0x76b36760, 000002e41aa6ec30, 0x0007d0df, 0x47892406,  C:\Windows\System32\msvcp_win.dll
 42,  42, 0x76ba0000, 0x76bb7000, 0x76ba9cf0, 000002e41aa6ec30, 0x00023d21, 0xf42d35cb,  C:\Windows\System32\profapi.dll
 43,  43, 0x76c80000, 0x76cc4000, 0x76c97aa0, 000002e41aa6ec30, 0x000461d2, 0xc3d29dd3,  C:\Windows\System32\SHLWAPI.dll
 44,  44, 0x76d30000, 0x76d55000, 0x76d34390, 000002e41aa6ec30, 0x0002f46a, 0x60562aa5,  C:\Windows\System32\IMM32.DLL
 45,  45, 0x76d60000, 0x76de4000, 0x76da2230, 000002e41aa6ec30, 0x0008e95d, 0xe2e5da02,  C:\Windows\System32\shcore.dll
 46,  46, 0x76df0000, 0x76dff000, 0x76df4700, 000002e41aa6ec30, 0x00012ed3, 0x6203ca74,  C:\Windows\System32\kernel.appcore.dll
 47,  47, 0x76e00000, 0x76e79000, 0x76e17460, 000002e41aa6ec30, 0x0007ec03, 0xb379d73d,  C:\Windows\System32\advapi32.dll
 48,  48, 0x76e80000, 0x7707c000, 0x76f6cea0, 000002e41aa6ec30, 0x00202912, 0x2b181c2c,  C:\Windows\System32\KERNELBASE.dll
 49,  49, 0x77080000, 0x77217000, 0x770aa630, 000002e41aa6ec30, 0x001a2c9e, 0x0c6bde55,  C:\Windows\System32\USER32.dll
 50,  50, 0x77280000, 0x774f6000, 0x773b1960, 000002e41aa6ec30, 0x0027c890, 0x3c1d04fa,  C:\Windows\System32\combase.dll
 51,  51, 0x77500000, 0x775bb000, 0x7753be10, 000002e41aa6ec30, 0x000c42c9, 0x7aab3b53,  C:\Windows\System32\RPCRT4.dll
 52,  52, 0x775c0000, 0x7761f000, 0x775f1990, 000002e41aa6ec30, 0x0006420e, 0x1b7f605d,  C:\Windows\System32\bcryptPrimitives.dll
 53,  53, 0x77690000, 0x7782a000, 0x77690000, 000002e41aa6ec30, 0x00198081, 0xa4208572,  C:\Windows\SYSTEM32\ntdll.dll
 54,  54, 0x74750000, 0x74779000, 0x74758030, 000002e41aa6ec30, 0x00026185, 0xce8a74ff,  C:\Windows\SysWOW64\ntmarta.dll
 55,  55, 0x6cc00000, 0x6ce0f000, 0x6cc83b90, 000002e41aa6ec30, 0x0020e84c, 0x078c09de,  C:\Windows\WinSxS\x86_microsoft.windows.common-controls_6595b64144ccf1df_6.0.18362.418_none_2e73e95e27897f63\comctl32.dll
 56,  56, 0x5e880000, 0x5e8a0000, 0x5e88c290, 000002e41aa6ec30, 0x0001e7f1, 0xbdab9d0c,  C:\Windows\SysWOW64\profext.dll
 57,  57, 0x77620000, 0x7767e000, 0x77635270, 000002e41aa6ec30, 0x000693ba, 0x02e4847e,  C:\Windows\SysWOW64\ws2_32.dll
 58,  58, 0x76bc0000, 0x76bc7000, 0x76bc1ea0, 000002e41aa6ec30, 0x0000f1bd, 0x6dc31739,  C:\Windows\SysWOW64\nsi.dll
 59,  59, 0x74400000, 0x74491000, 0x74412650, 000002e41aa6ec30, 0x00095e5d, 0x2c6f9efb,  C:\Windows\SysWOW64\dnsapi.dll
 60,  60, 0x5de90000, 0x5def1000, 0x5dea58f0, 000002e41aa6ec30, 0x000624d3, 0x6b5c540d,  C:\Windows\SysWOW64\FirewallAPI.dll
 61,  61, 0x5e850000, 0x5e875000, 0x5e8598c0, 000002e41aa6ec30, 0x00021ba5, 0x5589df23,  C:\Windows\SysWOW64\fwbase.dll
 62,  62, 0x5de80000, 0x5de86000, 0x5de80000, 000002e41aa6ec30, 0x00004ce2, 0xea780978,  C:\Windows\SysWOW64\KBDUS.DLL
 63,  63, 0x76450000, 0x76553000, 0x764a7f70, 000002e41aa6ec30, 0x00107c80, 0x73cba2d1,  C:\Windows\SysWOW64\msctf.dll
 64,  64, 0x75220000, 0x752a0000, 0x75240630, 000002e41aa6ec30, 0x0008556e, 0xee330fbd,  C:\Windows\SysWOW64\clbcatq.dll
 65,  65, 0x644f0000, 0x64509000, 0x644fc890, 000002e41aa6ec30, 0x000160c3, 0x0dca38de,  C:\Windows\SysWOW64\DXCore.dll
 66,  66, 0x60b10000, 0x60bd1000, 0x60b43f60, 000002e41aa6ec30, 0x000c1f8e, 0xc423d2bc,  C:\Windows\SysWOW64\dxgi.dll
 67,  67, 0x60d50000, 0x60f2e000, 0x60dc6d90, 000002e41aa6ec30, 0x001df856, 0x475a8f58,  C:\Windows\SysWOW64\d3d11.dll
 68,  68, 0x60be0000, 0x60d49000, 0x60c5ddf0, 000002e41aa6ec30, 0x001766df, 0x07322e0a,  C:\Windows\SysWOW64\dcomp.dll
 69,  69, 0x60f30000, 0x60f61000, 0x60f3e1d0, 000002e41aa6ec30, 0x00034f84, 0x9f1330d8,  C:\Windows\SysWOW64\DataExchange.dll
 70,  70, 0x60900000, 0x6091f000, 0x6090c680, 000002e41aa6ec30, 0x00027e32, 0xca6eb294,  C:\Windows\SysWOW64\rmclient.dll
 71,  71, 0x60920000, 0x60b04000, 0x609b03b0, 000002e41aa6ec30, 0x001e878e, 0x9050a7f4,  C:\Windows\SysWOW64\twinapi.appcore.dll
BB Table: 75880 bbs
module id, start, size:
module[ 53]: 0x000742c0,   9
module[ 53]: 0x000742d7,  13
module[ 53]: 0x00067b29,  16
module[ 53]: 0x00067b80,  14
module[ 53]: 0x00067b8e,  26
module[ 53]: 0x00067ba8,  18
module[ 53]: 0x00067b39,  11
module[ 53]: 0x00067b45,  12
module[ 53]: 0x000880c0,  69
module[ 53]: 0x00067b51,  21
module[ 53]: 0x00067b66,   8
module[ 53]: 0x00088be0,  24
module[ 53]: 0x00088bf8,   5
....
....
我猜测,drcov 统计了进程里的所有代码覆盖率,但是对于子进程就无能为力了,因为我的目标dll 是被子进程调用的。

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

最后于 2019-11-13 13:29 被Flyour编辑 ,原因:
收藏
免费 0
支持
分享
最新回复 (2)
雪    币: 38
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
可以指定模块的 
2019-11-13 10:43
0
雪    币: 1
活跃值: (24)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
你好,如果让dynamorio 指定 模块,也就是输出特定模块的代码覆盖?谢谢!
2020-9-4 15:17
0
游客
登录 | 注册 方可回帖
返回
//