相关疑难解决方法(0)

从C程序读取标志寄存器

为了好奇,我试图读取标志寄存器并以一种很好的方式将其打印出来.

我已经尝试使用gcc的asm关键字阅读它,但我无法让它工作.任何提示如何做到这一点?我正在运行Intel Core 2 Duo和Mac OS X.以下代码就是我所拥有的.我希望能告诉我是否发生溢出:

#include <stdio.h>

int main (void){
  int a=10, b=0, bold=0;
  printf("%d\n",b);
  while(1){
    a++;
  __asm__ ("pushf\n\t"
   "movl 4(%%esp), %%eax\n\t"
   "movl %%eax , %0\n\t"
   :"=r"(b)      
   :         
   :"%eax"        
   ); 
  if(b!=bold){ 
    printf("register changed \n %d\t to\t %d",bold , b);
  }
  bold = b;
  }
}
Run Code Online (Sandbox Code Playgroud)

这给出了分段错误.当我运行gdb时,我得到了这个:

Program received signal EXC_BAD_ACCESS, Could not access memory.
Reason: KERN_INVALID_ADDRESS at address: 0x000000005fbfee5c
0x0000000100000eaf in main () at asm.c:9
9       asm ("pushf \n\t"
Run Code Online (Sandbox Code Playgroud)

c x86 assembly flags

6
推荐指数
3
解决办法
6350
查看次数

使用条件标志作为GNU C内联asm输出

我正在编写一些代码,其中非常需要从嵌入式asm块中获取条件标志,并将其用作在调用C代码中分支的条件。我不想存储标志(那将是无用的且效率低下的;已经有更有效的方法来实现结果),而是直接使用标志。有什么方法可以使用GNU C内联asm约束来实现这一目标?我对适用于多种指令集体系结构的方法感兴趣,目的是将其与体系结构的LL / SC样式原子产生的条件标志一起使用。当然,另一个明显的使用情况(与我正在做的事情不同)是允许外部C代码在内联asm中的操作的进位标志结果上分支。

c assembly gcc inline-assembly

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

内联汇编错误,阻止了gcc编译尝试

问候,SO.

我有一些代码,我尝试使用gcc编译,但我的尝试被挫败了.任何更精通的人都可以帮助我解决这个问题,或许有一些我不知道的事情.

我正在Linux Kitchen 2.6.28-15上编译此代码 - 通用#49-Ubuntu SMP Tue Aug 18 19:25:34 UTC 2009 x86_64 GNU/Linux.

int
main(void)
{
    __asm__(
            "xorq %rdx,%rdx"
            "movq $0x68732f6e69622fff, %rdx"
            "shr $0x8, %rbx"
            "push %rbx"
            "movq %rsp,%rdi"
            "xorq %rax,%rax"
            "pushq %rax"
            "pushq %rdi"
            "movq %rsp,%rsi"
            "mov $0x3b, %al"
            "syscall"
            "pushq $0x1"
            "pop %rdi"
            "pushq $0x3c"
            "pop %rax"
            "syscall"
    );

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

返回的错误是:

$ gcc -o shellcode shellcode.c
shellcode.c: Assembler messages:
shellcode.c:4: Error: bad register name `%rdxmovq $0x68732f6e69622fff'
Run Code Online (Sandbox Code Playgroud)

感谢大家.

x86 assembly gcc x86-64 inline-assembly

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

标签 统计

assembly ×3

c ×2

gcc ×2

inline-assembly ×2

x86 ×2

flags ×1

x86-64 ×1