我目前正在拆解Visual Studio 2012 Express中的一些小型C程序,我注意到了二进制文件中的一种趋势.
在main函数中执行的第一组指令总是:
SUB ESP,154 ; Doesn't have to be 0x154.
.....
.....
.....
LEA EDI,DWORD PTR SS:[EBP-154]
MOV ECX,55 ; Also doesn't have to be 0x55.
MOV EAX,CCCCCCCC
REP STOS DWORD PTR ES:[EDI]
Run Code Online (Sandbox Code Playgroud)
那么,为什么机器用这个0xCCCCCCCC填充堆栈?我已经读过它被VC++或其他东西用作未初始化空间的标记?
然后让我说我要把一些东西放进我的缓冲区......编译器或处理器决定将它放在这个空间内的某个随机点,但是我不明白为什么它会把它放在那里......
EBP-90 > CCCCCCCC ÌÌÌÌ
EBP-8C > CCCCCCCC ÌÌÌÌ
EBP-88 > CCCCCCCC ÌÌÌÌ
EBP-84 > 00000001 ... ; Why this place?
EBP-80 > CCCCCCCC ÌÌÌÌ
EBP-7C > CCCCCCCC ÌÌÌÌ
EBP-78 > 41414141 AAAA ; Why this far from both the top …Run Code Online (Sandbox Code Playgroud) 可以执行可变长度列,例如:
private int k[][] = new int[3][];
for(int i = 0; i < k.length; i++) {
k[i] = new int[i+1];
}
Run Code Online (Sandbox Code Playgroud)
我想知道如果您知道列的长度,是否可以进行可变长度的行?:
private int k[][] = new int[][5];
for(int i = 0; i < k.length; i++) {
// How would you do this?
}
Run Code Online (Sandbox Code Playgroud)
谢谢。
我正在做一个关于webapp安全性和漏洞的学校项目,为此我创建了一个非常简单的网站,带有登录和搜索栏.
现在,我已经故意使登录静默,而搜索栏显示SQL注入的输出.因此,出于演示目的,我想对登录进行基于时间的完全盲目SQL注入攻击...但我有点卡住了.
在基于时间的情况下,我不知道如何枚举表中登录查询的列数:
SELECT * FROM customer WHERE cMAIL='' AND cPWD='';
我不能做ORDER BY n;#,因为当出现问题时我绝对没有错误输出.我能得到任何指示的唯一方法是通过SLEEP()或BENCHMARK().
但我不能将ORDER BY放入SELECT IF()语句中.那么如何找出存在多少列呢?(它使我的工会不可能).
谢谢!
编辑:可能值得一提的是,该网站的目的是非常不安全(不使用mysqli,只是mysql).因为它只是为了演示
我试图通过在Visual Studio 2012 Express中创建小型C程序,然后在Immunity Debugger中对它们进行反汇编来自学一些程序.但我显然遇到了一些我不理解的事情:
012A13F0 68 58582A01 PUSH OFFSET Hello_Wo.??_C@_0M@KPLPPDAC@H>; ASCII "Hello World"
012A13F5 FF15 BC922A01 CALL DWORD PTR DS:[<&MSVCR110D.printf>] ; MSVCR110.printf
Run Code Online (Sandbox Code Playgroud)
我对这两个指令感到困惑.事实上,对于我来说,操作码比调试器描述的实际指令更有意义.
显然,第一条指令将地址压入堆栈.当我按照转储中的地址时,它会显示一个区域,其中包含一些构成字符串的十六进制数Hello World.我相信这是.data segment.我对么?
并且; 我想Hello_Wo.??_C@_0M@... 这只是调试器提供给我的视觉辅助工具,所以我可以更好地理解这是......某事......
但OFFSET在这个推送指令中意味着什么?我无法在谷歌上找到任何东西.
我还想问一下另一条指令......
据我了解,它试图通过使用位于该地址的4个字节的值来调用一个子程序DS:[102A92BC] (&MSVCR110D...),作为呼叫的地址?
调试器告诉我DS:[102A92BC] = 5C0A93A0.并且该存储器范围保留给MSVCR110 .text segment.
我很抱歉,但我很难提出这个问题,因为我甚至不确定我应该怎么问.我希望你明白.谢谢你
偏离主题:我有一个最后一个有点愚蠢和偏离主题的问题,但我希望你不要介意:你不应该把数据段作为反汇编代码读取,不是吗?导入数据段让我在搜索时感到困惑5C0A93A0.
我们的老师给了我们一个与他自己的junit测试课一起编写一个非常简单的程序的任务.我已经这样做了,但我不太明白我是否得到了正确的结果,或者是否整个事情都被打破了.
这是我们正在测试的类(我写的那个):
package person;
public class Person {
private String name;
private char sex;
public Person(String name, char sex) {
if(name == null || name.equals(""))
throw new IllegalArgumentException();
if(sex != 'M' || sex != 'F')
throw new IllegalArgumentException();
this.name = name;
this.sex = sex;
}
public void setName(String name) {
if(name == null || name.equals(""))
throw new IllegalArgumentException();
this.name = name;
}
public void setSex(char sex) {
if(sex != 'M' || sex != 'F')
throw new IllegalArgumentException();
this.sex = sex; …Run Code Online (Sandbox Code Playgroud)