小编Vol*_*ile的帖子

为什么堆栈填充0xCCCCCCCC

我目前正在拆解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)

assembly disassembly

17
推荐指数
1
解决办法
2251
查看次数

多维数组:可变长度行?

可以执行可变长度列,例如:

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)

谢谢。

java multidimensional-array variable-length-array

5
推荐指数
1
解决办法
1万
查看次数

完全盲目的SQL注入列枚举?

我正在做一个关于webapp安全性和漏洞的学校项目,为此我创建了一个非常简单的网站,带有登录和搜索栏.

现在,我已经故意使登录静默,而搜索栏显示SQL注入的输出.因此,出于演示目的,我想对登录进行基于时间的完全盲目SQL注入攻击...但我有点卡住了.

在基于时间的情况下,我不知道如何枚举表中登录查询的列数:

SELECT * FROM customer WHERE cMAIL='' AND cPWD='';

我不能做ORDER BY n;#,因为当出现问题时我绝对没有错误输出.我能得到任何指示的唯一方法是通过SLEEP()或BENCHMARK().

但我不能将ORDER BY放入SELECT IF()语句中.那么如何找出存在多少列呢?(它使我的工会不可能).

谢谢!

编辑:可能值得一提的是,该网站的目的是非常不安全(不使用mysqli,只是mysql).因为它只是为了演示

mysql sql-injection

5
推荐指数
1
解决办法
1722
查看次数

x86程序集"推送OFFSET ......"和助记符?

我试图通过在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.

assembly disassembly visual-studio-2012

4
推荐指数
1
解决办法
1万
查看次数

JUnit测试失败,但结果是预期的?

我们的老师给了我们一个与他自己的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)

java junit

0
推荐指数
1
解决办法
320
查看次数