- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我一直在尝试仅当嵌套结构中的字符串作为参数匹配我选择的特定模式时才在函数内设置断点,如下所示:
bp `main.c:2236` ".block { .if ( $spat(\"@@(stNames->NameComponent.Buffer)\", \"*ab*\" )){.echo \"BKP HIT! \"; .printf \"%mu str\n\",> @@(NameInfo->FinalComponent.Buffer); } .else {.echo \"NO HIT \"; .printf \"%mu str:\n\", @@(stNames->NameComponent.Buffer); gc;} } "
这个断点设置在函数的开头,在参数符号已经被解析之后。它表现得很奇怪,有时即使 $spat 中的模式不匹配它也会一直被命中,有时即使模式匹配它也不会命中。
我也试过this运气不好,因为我找不到在嵌套结构的情况下使用 poi() 命令的方法。片段波纹管:
bp Kernel32!CreateFileW ".printf \"%mu\\n\", poi(esp+4); as /mu ${/v:FileName} poi(esp+4); .block{.if $spat(\"${FileName}\", \"*target*\") {.echo Hit} .else {.echo Not Yet;g;}}"
最佳答案
表达式\"@@(stNames->NameComponent.Buffer)\"
可能 does not evaluate to a quoted string
独立评估
当写条件时,把条件分解得越小越好
并将它们放在一个txt文件中,并提供断点的脚本文件
喜欢bp
:32 " $$>a< c:\\windscrypted.txt
更容易理解
如果问题是独立的,提供正确答案也会有帮助可复制的内容
因为我无法评估问题中难以理解的表达方式,所以我在下面提供了一个演示,看看这是否是要求的内容
编译链接助手
structnest:\>type "c:\Program Files\Microsoft Visual Studio 10.0\VC\compile.bat"
@ECHO OFF
REM Compile and Link Helper Utility.
REM Add New Entry CompileMe in Visual_Studio_IDE->Tools->ExternalTools.
REM Provide path to this bat file in command
REM Provide $(ItemFileName)$(ItemExt) as Arguments
REM $(BinDir) as Initial Directory
REM Enjoy One Click Compile & link Simple Single File Demo Sources
@call "C:\Program Files\Microsoft Visual Studio 10.0\VC\vcvarsall.bat" x86
cl /Zi /nologo /W4 /analyze %1% /link /RELEASE
pause
源文件详细信息
structnest:\>dir /b
structnest.cpp
structnest:\>type structnest.cpp
#include <windows.h>
#include <winternl.h>
#include <stdio.h>
#define SOMESIZE 20
typedef VOID (NTAPI *g_RtlInitUnicodeString) (PUNICODE_STRING DestinationStri
ng, PCWSTR SourceString );
#pragma pack (1)
typedef struct _OUTNEST
{
int a;
int b;
short c;
UNICODE_STRING Nestin;
}OutNest,*POutNest;
#pragma pack()
int main (void)
{
POutNest MyNest = ( POutNest ) calloc ( 0x01 , sizeof(OutNest) );
PWSTR buff = ( PWSTR ) calloc ( 0x30 , sizeof(wchar_t) );
HMODULE hMod = LoadLibrary("ntdll.dll");
if ( (hMod != NULL) && (MyNest != NULL) && (buff != NULL))
{
g_RtlInitUnicodeString RtlInitUnicodeString = ( g_RtlInitUnicodeString )
GetProcAddress ( hMod , "RtlInitUnicodeString");
if (RtlInitUnicodeString != NULL )
{
for (int i = 0; i< SOMESIZE; i++)
{
swprintf_s(buff, 0x29 , L"this is string number %.2d",i);
RtlInitUnicodeString(&MyNest->Nestin,buff);
printf("%S\n",MyNest->Nestin.Buffer);
}
printf("done\n");
goto getout;
}
printf("GetprocAddress failed\n");
goto getout;
}
printf("calloc() %p %p LoadLib %p failed\n" , MyNest,buff,hMod);
getout:
if (MyNest)
free(MyNest);
if(buff)
free(buff);
if(hMod)
FreeLibrary(hMod);
return 0;
}
structnest:\>"c:\Program Files\Microsoft Visual Studio 10.0\VC\compile.bat" stru
ctnest.cpp
Setting environment for using Microsoft Visual Studio 2010 x86 tools.
structnest.cpp
Press any key to continue . . .
structnest:\>dir /b *.exe
structnest.exe
structnest:\>structnest.exe
this is string number 00
this is string number 01
this is string number 02
this is string number 03
this is string number 04
this is string number 05
this is string number 06
this is string number 07
this is string number 08
this is string number 09
this is string number 10
this is string number 11
this is string number 12
this is string number 13
this is string number 14
this is string number 15
this is string number 16
this is string number 17
this is string number 18
this is string number 19
done
脚本文件详细信息
structnest:\>type c:\nestedbreak.txt
as /mu ${/v:mystr} @@( MyNest->Nestin.Buffer );
.block { r $t0 = $spat( "${mystr}", "*11" ); }
.if( @$t0 != 1 ) { gc } ;
explanation of script file
as /mu ${/v:mystr}
Sets the alias equivalent equal to the null-terminated Unicode string
that begins at Address @@( MyNest->Nestin.Buffer ).
.block {} to force alias evaluation.
a Pseudo register $t0 is set to the result of $spat() can be 0 or 1
"${mystr}" on alias evaluation will become "this is string number 00"
a Double Quoted string not address or some other expression
"*11" is again a Double Quoted wild card pattern string it will match "11"
at any position in the Input String .
.if is a conditinal that will break only when @$t0 == 1
现在我们有了一个稍微更全面的条件,其中每个表达式是独立可验证的,我们继续在断点中使用它
执行细节
structnest:\>cdb -c ".lines;g main;r;.echo SET A CONDITINAL BREAK POINT AND RUN
THE EXE;bp `:32` \" $$^>a^< c:\\nestedbreak.txt \";g ;.lastevent;.echo why did w
e break here ? now that we broke lets go again;g;q " structnest.exe
explanation as follows
cdb.exe console mode windbg;
.lines; load line information (lineinfo default off in cdb.exe needed to set bp on src lines)
g main; ( we are interested in our code for which we have src not some random system module)
r; print the registers to confirm we reached main properly
.echo just a signal to show that we are alive and kicking
`:32` "$$>a< c:\\nestedbreak.txt" conditional break point on src line 32 ( inner double quotes/ unaccpetable > < chars escaped )
g; run the exe
.lastevent; shows the reason why we broke;
.echo a signal to indicate that we broke
g;q; finish running the exe and quit debugger
执行输出详情
structnest:\>cdb -c ".lines;g main;r;.echo SET A CONDITINAL BREAK POINT AND RUN
THE EXE;bp `:32` \" $$^>a^< c:\\nestedbreak.txt \";g ;.lastevent;.echo why did w
e break here ? now that we broke lets go again;g;q " structnest.exe
Microsoft (R) Windows Debugger Version 6.12.0002.633 X86
0:000> cdb: Reading initial command '.lines;g main;r;.echo SET A CONDITINAL BREA
K POINT AND RUN THE EXE;bp `:32` " $$>a< c:\\nestedbreak.txt ";g ;.lastevent;.ec
ho why did we break here ? now that we broke lets go again;g;q '
Line number information will be loaded
eax=00034180 ebx=7ffd6000 ecx=00000001 edx=0041a5f0 esi=00000000 edi=00000000
eip=00401000 esp=0013ff7c ebp=0013ffc0 iopl=0 nv up ei pl zr na pe nc
cs=001b ss=0023 ds=0023 es=0023 fs=003b gs=0000 efl=00000246
structnest!main:
00401000 55 push ebp
SET A CONDITINAL BREAK POINT AND RUN THE EXE
this is string number 00
this is string number 01
this is string number 02
this is string number 03
this is string number 04
this is string number 05
this is string number 06
this is string number 07
this is string number 08
this is string number 09
this is string number 10
Last event: 16d0.2784: Hit breakpoint 0
debugger time: Thu May 15 16:10:10.625 2014 (UTC + 5:30)
why did we break here ? now that we broke lets go again
this is string number 11
this is string number 12
this is string number 13
this is string number 14
this is string number 15
this is string number 16
this is string number 17
this is string number 18
this is string number 19
done
quit:
structnest:\>
关于c - Windbg 条件断点与嵌套结构中的字符串比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23635792/
所以我试图设置“内容”类的高度,但它似乎不起作用。我对嵌套 DIV 非常陌生,我已经尝试了我在谷歌搜索中发现的修复程序,但似乎没有任何效果。帮助?
好的,所以我一直在四处寻找,但找不到这个问题的答案。但是,我需要将一个 View 嵌套在另一个 View 中。 我有一个 $layout 正在使用我拥有的 default.layout Blade 文
好的,所以我一直在四处寻找,但找不到这个问题的答案。但是,我需要将一个 View 嵌套在另一个 View 中。 我有一个 $layout 正在使用我拥有的 default.layout Blade 文
基本上,我的问题很简单,但它需要知道 Struts 1.1 并且还活着的人。 我尝试构建的伪代码看起来像这样: IF element.method1 = true THEN IF element
我正在尝试将 Excel 嵌套 IF 语句转换为代码语言,但我不确定我是否正确执行此操作,希望能得到一些帮助 这是Excel语句: =IF(D3="Feather",IF(OR(I3>1000,R3=
如果我们创建两个或三个评论并对其进行多次回复,则“有用”链接在单击时会导致问题,它会对具有相同编号的索引执行 ng-click 操作,从而显示具有相同索引的所有文本。如何解决此嵌套问题,以便在单击链接
我在项目中使用Scala,想与Stripe集成,但它只提供Java API。例如,要创建 session ,我使用: val params = new util.HashMap[String, Any
以下代码有一个 Div,其中连续包含四个较小的 Div。四个 Div 中的每一个还包含一个较小的 Div,但此 Div 未显示。我尝试了各种显示和位置组合,看看 div 是否会出现。 classGoa
我在这里有一个问题,循环是: for (i=0; i < n; ++i) for (j = 3; j < n; ++j) { ...
我正在尝试编写代码来显示具有奇数宽度的形状。形状完成后,将其放置在外部形状内。用户将能够输入用于形状的字符和行数。我希望生成一个形状,并通过 for 循环生成一个外部形状。 ***** .
$(".globalTabs").each(function(){ var $globalTabs = $(this); var parent = $globalTabs.parent
关闭。此题需要details or clarity 。目前不接受答案。 想要改进这个问题吗?通过 editing this post 添加详细信息并澄清问题. 已关闭 9 年前。 Improve th
所以我在这个问题上遇到了一些麻烦,因为变量 i。我只是不确定在第二个 while 循环中如何处理它。对于我的外循环,我知道它将运行 log_4(n^2) 次迭代。对于内部 while 循环,我计算的迭
我似乎找不到在枚举上应用多个 if/then 逻辑的工作方式。 anyOf 不应用条件逻辑,而是表示如果其中任何一个匹配则很好。 allOf 再次不应用条件逻辑,而是测试属性/必填字段的超集。 这是一
如何访问 ReaderT 的内部 monad。 在我的例子中,我有类型: newtype VCSSetupAction a = VCSSetupAction (ReaderT (Maybe VCSCo
这个问题在这里已经有了答案: Add leading zeroes/0's to existing Excel values to certain length (7 个回答) 7年前关闭。 我正在寻
我已经绑定(bind)了很多 AND/OR 函数的组合并且没有运气。 这是我需要创建的: 在 B 列中,我有公司 ID,范围从两个数字字符到六个数字字符。 我需要在 B 列中的每个公司 ID 之前的每
我是 VBA 新手,在尝试编写的宏中使用 If 语句时遇到了一些困难。每个月我都会收到一份 Excel 报告,其中列出了我们公司的哪些员工执行了某些任务。我正在编写的宏旨在将每个员工的数据复制并粘贴到
如果在 B 列中找到单元格 A1 中的值,则使用文本 321 填充除非在 C 列中找到单元格 A1 中的值,在这种情况下填充文本 121反而。如果单元格 A1 的内容不在 B 列或 C 列中,则使用
我有几十万个地址。其中一些在整数之后有粒子。如 4356 A Horse Avenue , 其他格式正常4358 Horse Avenue .有些有“A”,有些有“B”。我正在尝试删除整数和粒子之间的
我是一名优秀的程序员,十分优秀!