小编Jes*_*ter的帖子

C中的内联汇编

非常自我解释的代码.为什么不起作用!

#include <stdio.h>

int main() {
    __asm__("number dw 0"); // declare number?
    printf("%d",number);
    __asm__("mov %eax,number"
            "inc %eax"
            "mov number,%eax");
    printf("%d",number);
    return 0;
}

cc     ex1.c   -o ex1
ex1.c: In function ‘main’:
ex1.c:22:17: error: ‘number’ undeclared (first use in this function)
ex1.c:22:17: note: each undeclared identifier is reported only once for each function it appears in
make: *** [ex1] Error 1
Run Code Online (Sandbox Code Playgroud)

谢谢.

我有很多知识空白要填补... gcc手册让我对内联汇编问题感到困惑,谷歌搜索教程结果......

在intel i7处理器上工作

assembly gcc inline-assembly

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

C# - dll引用如何工作?

我正在开发一个与Web服务连接的客户端应用程序,为了做到这一点,我使用WebClient类和JavaScriptSerializer类将请求的字符串解析为JSON.

我不得不从System.Web.Extensions.dll添加一个引用,使第二个工作,并且工作得很好但是如果我将我的exe文件移动到其他计算机显然会抛出我无法找到dll的异常.我试图将System.Web.Extensions.dll复制到我的应用程序的bin文件夹并再次添加引用,但它似乎无法正常工作..

我想要做的很简单,我想把我的exe文件的路径引用的dll,然后我一直迁移文件,我希望程序通过相对路径加载dll.

说真的,我不知道为什么微软没有让事情变得更容易处理(例如在java中导入jar文件),这非常令人困惑,同样的事情发生在我之前的wiaaut.dll上我必须在系统与regsvr ..

.net c# dll .net-assembly

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

InternalsVisibleTo - 如何阻止某人创建具有相同名称的程序集并访问内部类或方法?

最近,我遇到了InternalsVisibleTo方法,使内部类和方法对其他程序集可见.虽然这在你有大量程序集的应用程序中非常有用,并且你想避免循环依赖或代码重复,但我们中的一些人认为这可能会暴露一个安全漏洞.你的想法是什么?

例如,如果我有一个属性:

[assembly: System.Runtime.CompilerServices.InternalsVisibleTo("foo")]

即使将其隐藏在assemblyInfo.cs文件中,也可以通过反汇编等方式发现这一点.并非每个人都会对其组件进行签名或混淆.现在,有了可能有更多功能的信息,我可以创建自己的程序集foo.dll,然后使用我以前无法使用的方法/类.

.net c# reflection .net-assembly c#-4.0

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

汇编64位 - movl,movq.交换还好吗?

语境:

在64位linux上学习GAS汇编.许多教程都是针对32位汇编的.

很难通过x86_64程序集进行丛林攻击.

题:

当我用gcc编译ac程序时,我仍然看到一些%eaxmovl.

我主要玩int32_t.

但我认为必须使用64位指令x86_64(如rax,rbx等等).

我不太了解.他们不应该%raxmovq?在我的装配程序中,我应该使用movq,对吧?即使是32位整数?我是一个迷失的初学者.

谢谢

64-bit assembly x86-64 gnu-assembler instructions

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

DIV命令使我的程序挂起。如何避免呢?(包括简短代码。)

(处理器Intel x86)

.MODEL SMALL

Print   EQU 2
Exit    EQU 4Ch

.DATA ;------------------------------------------------------

a   DW  8
b   DW  2

.CODE ;------------------------------------------------------

Start   PROC

    mov ax, SEG DGROUP
    mov ds, ax

    mov ax, a
    ;div    b <---- uncommenting it makes program hang

    mov dx, ax
    add dx, '0'

    mov ah, Print      
    int 21h
    mov ah, Exit
    int 21h

; -----------------------------------------------------------

Start   ENDP
    .STACK 512

    END Start
Run Code Online (Sandbox Code Playgroud)

如果使用Turbo Assembler进行编译,则代码将输出8。如果取消注释DIV命令,则代码将挂起。

使用Turbo Debugger查看寄存器时,我看到DIV命令将除法结果发送到AX寄存器中-相同的寄存器存储了8,并将被发送到DX进行打印。

DIV挂起程序的原因是什么?我是否监督过DIV将数据放入寄存器的工作,这些数据将由某些重要的后台功能使用?

x86 assembly division hang

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

什么是主函数执行时指向的EBP寄存器?(英特尔x82架构)

我知道在函数调用期间,EBP寄存器指向被调用函数推送到堆栈的第一个值.但是当第一次调用main函数时,EBP寄存器指向什么?它是第一个被main函数压入堆栈的局部变量吗?

c x86 assembly calling-convention

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

装配中的减法顺序

所以我有.

pushl %ebp
movl %esp, %ebp
movswl 12(%ebp), %edx
movl 8(%ebp), %eax
subl %edx, %eax
popl %ebp
ret
Run Code Online (Sandbox Code Playgroud)

如果说我的函数调用2个变量:function(int a, short b).

当我打电话给减法时,它会是(b - a)或者(a - b).如果我是正确的话,eax就是值存储的地方,所以我想说它会是(a - b).

x86 assembly calling-convention att

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

汇编:ROL 指令正确吗?

假设我在 AX 中存储了以下值:1000100001001,在 CL 中我的值为 1。

当我执行 ROL AX, CL 指令时,我的 SW 告诉我 AX 的内容现在是 10001000010010。

然而,正确答案不应该是 00010000100101 吗?(我将所有位都向左滚动,因此 MSB 在右侧作为 LSB 出现?)

x86 assembly

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

x86-64 指令“shrb %​​dil”是什么意思?

我知道这shrb代表逻辑右移。通常它与两个参数一起使用,shrb amount, %register. 但是,在我查看的代码中,它没有使用移位量 - 只指定了一个寄存器:

shrb %dil
Run Code Online (Sandbox Code Playgroud)

其中%dil代表 的最低有效字节%rdi

现在上面的命令是否意味着我们右移 1?你会怎么去发现这个?有没有办法以某种方式执行命令,看看会发生什么?该文档对于提供有关省略班次金额时会发生什么的信息没有帮助:https : //docs.oracle.com/cd/E19253-01/817-5477/817-5477.pdf

x86 assembly x86-64 att

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

C缓冲区溢出攻击

我的CS课程中有一个以缓冲区溢出攻击为中心的项目.

我很难完全理解这个话题.

说我有以下功能:

08048cc5 <getbuf>:
 8048cc5:   55                      push   %ebp
 8048cc6:   89 e5                   mov    %esp,%ebp
 8048cc8:   83 ec 38                sub    $0x38,%esp
 8048ccb:   8d 45 d8                lea    -0x28(%ebp),%eax
 8048cce:   89 04 24                mov    %eax,(%esp)
 8048cd1:   e8 32 01 00 00          call   8048e08 <Gets>
 8048cd6:   b8 01 00 00 00          mov    $0x1,%eax
 8048cdb:   c9                      leave
 8048cdc:   c3                      ret
Run Code Online (Sandbox Code Playgroud)

目前它返回此功能:

08048c53 <test>:
 8048c53:   55                      push   %ebp
 8048c54:   89 e5                   mov    %esp,%ebp
 8048c56:   83 ec 28                sub    $0x28,%esp
 8048c59:   e8 63 04 00 00          call …
Run Code Online (Sandbox Code Playgroud)

c x86 assembly buffer buffer-overflow

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