小编amo*_*luc的帖子

NOP雪橇如何工作?

我找不到回答这个问题的好消息来源.我知道nop sled是一种用于避免缓冲区溢出攻击中的堆栈随机化的技术,但我无法理解它是如何工作的.

说明这种方法的简单例子是什么?

像128字节的nop雪橇这样的术语是什么意思?

c assembly stack buffer-overflow nop

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

什么是pushl/popl%esp的汇编级表示?

C++

ATT大会

我试图理解以下两条指令的行为:

pushl %esp
Run Code Online (Sandbox Code Playgroud)

和:

popl %esp
Run Code Online (Sandbox Code Playgroud)

请注意,它们将计算出的值存储回来%esp.

我正在独立地考虑这些指令,而不是按顺序.我知道存储的值%esp总是递增/递减之前的值,但是我怎么能用汇编语言表示行为呢?这是我到目前为止所提出的:

推送:

movl %esp, %edx     1. save value of %esp
subl  $4, %esp      2. decrement stack pointer
movl %edx, (%esp)   3. store old value of %esp on top of stack
Run Code Online (Sandbox Code Playgroud)

对于pop:

movl (%esp), %esp   You wouldn’t need the increment portion. 
Run Code Online (Sandbox Code Playgroud)

它是否正确?如果没有,我哪里错了?谢谢.

x86 assembly stack att

7
推荐指数
1
解决办法
9187
查看次数

通过从函数调用中的%esp中减去分配多少空间?

C++,ATT汇编

我有以下汇编代码:

push %ebp
mov  %esp, %ebp
sub $0x28, %esp
(...)
Run Code Online (Sandbox Code Playgroud)

我的教科书声称通过从%esp中减去0x28(作为堆栈形成的一部分),12个字节被分配给变量.为什么从堆栈中减去十进制40分配12个字节?

c++ assembly att

6
推荐指数
1
解决办法
900
查看次数

当两个.c文件具有相同符号但不同类型的全局变量时,引用如何工作?

C

说我有以下C模块:

模块1

#include <stdio.h>
int x;
int main(){
  foo();
  printf("%i\n",x);
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

模块2

double x;
void foo(){
  x = 3.14;
}
Run Code Online (Sandbox Code Playgroud)

我的问题是:链接器在这种情况下做了什么?在我正在阅读的教科书中,它说编译器只为链接器符号表选择两个弱全局变量中的一个.选择这两个中的哪一个?或者都被选中了?如果是这样,为什么?谢谢.

c linker global-variables

6
推荐指数
1
解决办法
691
查看次数

汇编TEST指令如何与这些跳转指令一起使用?

使用AT&T汇编语法,我试图了解如何testl在汇编代码中使用.特别:

testl  %edx, %edx
jle    .L3
Run Code Online (Sandbox Code Playgroud)

我知道设置条件标志testl的位数and是否相同,但如果不比较两个值,我怎么能解释'如果小于或等于'则跳转?

x86 assembly conditional-statements

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

C++错误:'struct ...的前向声明?

周期性包容问题

我转发声明另一个标题中的一个类,试图解决它们的周期性包含.这是我的两个文件:

第一个文件(Parameter.h):

#pragma once
#include "Token.h"`

class Expression;

class Parameter {
public:

    Parameter() {
        string = new Token();
        identifier = new Token();
        expr = new Expression();
    }

    Token* string;
    Token* identifier;
    Expression* expr;
};
Run Code Online (Sandbox Code Playgroud)

第二个文件(Expression.h):

#pragma once
#include "Token.h"
#include "Parameter.h"

class Expression {
public:
    Expression() {
        param1 = new Parameter();
        param2 = new Parameter();
        op = new Token();
    }

    Expression(Parameter* p1, Token* o, Parameter* p2) {
        param1 = p1;
        param2 = p2;
        op = …
Run Code Online (Sandbox Code Playgroud)

c++ compiler-errors include cyclic-reference

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

这两种关系对于联合操作是否兼容?

我不确定以下两个关系是否适合联合:

R: <- schema name
B
1
2
2
3
3
Run Code Online (Sandbox Code Playgroud)

和:

Q: -< schema name
A  B
5  1
6  1
4  2
3  4
Run Code Online (Sandbox Code Playgroud)

我想做工会:QU R。可以吗?结果如何?

database union relational-algebra relational-database

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

如何通过C++ std :: set一个元素提前结束迭代?

C++

我有以下迭代循环:

for (it = container.begin(); it != container.end(); ++it) {
    //my code here
}
Run Code Online (Sandbox Code Playgroud)

我想尽早结束这个迭代1元素.我尝试了以下但它不编译:

for (it = container.begin(); it != container.end() - 1; ++it) { //subtract 1
    //my code here
}
Run Code Online (Sandbox Code Playgroud)

如何才能做到这一点?谢谢.

c++ iterator loops set

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

如何将IA32'cmp'指令转换为Y86?

IA32Y86

ATT大会

我有以下IA32汇编代码:

Bubble:
.LFB0:
    pushl   %esi
    pushl   %ebx
    movl    16(%esp), %esi
    movl    12(%esp), %edx
    subl    $1, %esi
    andl    %esi, %esi
    jle .L1
.L7:
    xorl    %eax, %eax
.L5:
    movl    4(%edx,%eax,4), %ecx
    movl    (%edx,%eax,4), %ebx
    cmpl    %ebx, %ecx
    jge .L4
    movl    %ebx, 4(%edx,%eax,4)
    movl    %ecx, (%edx,%eax,4)
.L4:  
    addl    $1, %eax
    cmpl    %eax, %esi
    jg  .L5
    subl    $1, %esi
    jne .L7
.L1: 
    popl    %ebx
    popl    %esi
    ret
Run Code Online (Sandbox Code Playgroud)

我正在尝试将其转换为Y86汇编代码.我在翻译比较指令时遇到问题:

 cmpl    %ebx, %ecx
Run Code Online (Sandbox Code Playgroud)

谢谢.

x86 assembly cmp y86

2
推荐指数
1
解决办法
6636
查看次数

这段汇编代码无效吗?

我试图弄清楚下面的汇编代码是否无效.

movb $0xF, (%bl)
Run Code Online (Sandbox Code Playgroud)

它无效吗?如果是这样,为什么?谢谢.

x86 assembly att addressing-mode

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