小编Mic*_*tch的帖子

为什么使用 leal 而不是 incq?

我在鬼混,发现以下

#include <stdio.h>

void f(int& x){
    x+=1;
}

int main(){
    int a = 12;
    f(a);
    printf("%d\n",a);
}
Run Code Online (Sandbox Code Playgroud)

当由g++ (Ubuntu 4.8.4-2ubuntu1~14.04.3) 4.8.4with翻译g++ main.cpp -S生成此组件时(仅显示相关部件)

_Z1fRi:
    pushq   %rbp
    movq    %rsp, %rbp
    movq    %rdi, -8(%rbp)
    movq    -8(%rbp), %rax
    movl    (%rax), %eax
    leal    1(%rax), %edx
    movq    -8(%rbp), %rax
    movl    %edx, (%rax)
    popq    %rbp
    ret
main:
    pushq   %rbp
    movq    %rsp, %rbp
    subq    $16, %rsp
    movl    $12, -4(%rbp)
    leaq    -4(%rbp), %rax
    movq    %rax, %rdi
    call    _Z1fRi
    movl    -4(%rbp), %eax
    movl    %eax, %esi …
Run Code Online (Sandbox Code Playgroud)

c++ assembly g++ x86-64

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

如何定义SCI-系统控制中断向量?

根据ACPI规范,FADT(固定的ACPI描述表)表包含一个向OS 报告SCI中断号的字段。该字段定义如下:

在此处输入图片说明

我将FADT表转储到了Intel x86平台上,并看到SCI中断与该数字相关联9

在此处输入图片说明

但是根据《英特尔手册》,0-31保留了IA体系结构定义的中断的向量。具体来说,9定义为:

在此处输入图片说明

因此,根据说明,9I386处理器之后不会生成。因此,我想这就是SCI 可以挽救 9的原因。这可以看作是ACPI规范的x86特定实现

我说得对吗?

加1

似乎我在这里误解了一些东西。稍后将更新。

x86 interrupt interrupt-handling

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

我对ASM的强烈反应

你好我学校的每个人都必须在ASM [intel] [NASM]做我自己的strdup功能.

我有一个奇怪的问题......

在我的代码中,如果我 call _malloc

我的代码段错误与此错误:

Program received signal SIGSEGV, Segmentation fault.
0x00007fff849612da in stack_not_16_byte_aligned_error () from /usr/lib/system/libdyld.dylib
Run Code Online (Sandbox Code Playgroud)

我不明白为什么,因为在.text中我说过 extern _malloc

有人知道我为什么会犯这个错误?:)

这是我的代码:

section .text
     global _ft_strdup
     extern _strlen
     extern _malloc
     ;  extern _ft_memcpy

_ft_strdup:
     call _strlen           ;rax = len of str
     mov r8, rdi            ;r8 = str = src
     inc rax                ;rax++
     ;  mov r9, rax         ;len of dest with '\0'
     mov rdi, rax           ;to send the len for malloc
     call _malloc           ;rax = ptr of dest …
Run Code Online (Sandbox Code Playgroud)

macos assembly glibc x86-64 nasm

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

Swift 损坏的函数名称映射

Hopper 反汇编器如何理解函数的名称?

例如,我有一个名为 function() 的简单 Swift 函数,在使用该函数反汇编可执行文件后,Hopper 向我显示它的损坏名称是 __T04file8functionyy。我可以在可执行文件中找到这些符号的位置,但是我找不到它是如何将函数的地址与其名称映射的。

x86 disassembly swift hopper

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

Spring Boot基本身份验证Spring Boot会话可能

我有一个Spring Boot后端服务器应用程序,该应用程序通过https实现基本身份验证。不会有传统的基于Web的前端,而是我的android和IOS客户端将使用Rest API调用。

后端应用程序当前正在验证收到的用户名和密码信息,并以正确的状态消息进行响应(401、200)。我可以使用spring boot会话让用户在会话开始时登录,然后对该会话的每个后续rest api调用使用会话值吗?

意识到此问题类似于[ 带有android和ios的Spring boot rest安全性,但该问题似乎并未涵盖缓存和使用针对会话的所有其他Rest API调用接收的会话值。是否可以在Rest put和post API命令中将会话值作为参数传递?目标是让应用程序在接受其他的放置和发布命令之前,验证用户的注册并验证其凭据。

我确实阅读了spring.io文档,但没有找到涵盖的主题。Spring引导的新功能。

security rest session spring spring-boot

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

带有 intel x86-32 位程序集的 gcc:访问 C 函数参数

我在做一个操作系统的实现工作。
首先是代码:

//generate software interrupt
void generate_interrupt(int n) {

    asm("mov al, byte ptr [n]");
    asm("mov byte ptr [genint+1], al");
    asm("jmp genint");
    asm("genint:");
    asm("int 0"); 
}
Run Code Online (Sandbox Code Playgroud)

我正在用-masm=intelgcc 中的选项编译上面的代码。此外,这不是生成软件中断的完整代码。

我的问题是我收到错误n undefined,我该如何解决,请帮忙?

它也在链接时而不是在编译时提示错误,下面是一个图像在此处输入图片说明

x86 assembly gcc inline-assembly osdev

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

如何在运行时切换弹簧配置文件

我有带有配置文件的 Spring Boot 应用程序。现在我想在运行时切换配置文件,刷新 spring 上下文并继续执行应用程序。如何在运行时切换活动配置文件(switchEnvironment 方法)?

@SpringBootApplication
public class Application implements CommandLineRunner {

    @Autowired
    private Config config;

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }

    @Override
    public void run(String ... strings) throws Exception {
        System.out.printf("Application is running in %s environment, service parameters below:\n",
                getEnvProperty("spring.profiles.active").toUpperCase());
        printServiceParameters();
        switchEnvironment();
        printServiceParameters();
    }

    private String getEnvProperty(String propertyName) {
        return config.getEnv().getProperty(propertyName);
    }

    private void printServiceParameters() {
        System.out.println(getEnvProperty("service.endpoint"));
    }

    private void switchEnvironment() {
        //todo Switch active profile
    }

}
Run Code Online (Sandbox Code Playgroud)

配置类

@Configuration
@ConfigurationProperties
public class Config{ …
Run Code Online (Sandbox Code Playgroud)

java profile spring spring-boot

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

为什么汇编程序员想要从这个位置减去ebp而不是esp?

关于在x86汇编语言中设置堆栈帧的ebp和esp的使用,我有点混淆.在以下代码中:

section '.code' code readable executable        ; define the code section of the file
main:                ;main label is where execution begins
push ebp
mov ebp,esp          ;set up the base ptr
sub ebp,4            ;subtract 4 from ebp
mov dword [esp],msg
call [printf]
mov dword [esp],p   ; pass pause>nul cmd to system to hold the box open
call [system]
mov dword [esp],0              ;pass NULL to exit
call [exit]   
Run Code Online (Sandbox Code Playgroud)

程序员从ebp中减去了4,但我不确定原因.通常,我在这里看到ESP减去而不是EBP.在这里从EBP中减去的目的是什么?

x86 assembly stack-frame fasm

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

有一个为Windows API编写的汇编代码,如何在Linux上编译它并使用Wine运行

本简介中有一个示例代码,如下所示:

; Sample x64 Assembly Program
; Chris Lomont 2009 www.lomont.org
extrn ExitProcess: PROC   ; external functions in system libraries
extrn MessageBoxA: PROC
.data
caption db '64-bit hello!', 0
message db 'Hello World!', 0
.code
Start PROC
  sub    rsp,28h      ; shadow space, aligns stack
  mov    rcx, 0       ; hWnd = HWND_DESKTOP
  lea    rdx, message ; LPCSTR lpText
  lea    r8,  caption ; LPCSTR lpCaption
  mov    r9d, 0       ; uType = MB_OK
  call   MessageBoxA  ; call MessageBox API function
  mov    ecx, …
Run Code Online (Sandbox Code Playgroud)

assembly winapi x86-64 masm nasm

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

表达式AND命令中缺少运算符退出代码1

我有以下代码和一个简单的汇编程序

.686p
.model flat, stdcall 
.mmx
.xmm


.code 
DataString DB 'AGIJKSZ', 0FFH ;

MyProc1 proc 

    vpbroadcastd ymm0, [4 bytes of JJJJ]
    vpcmpeqb ymm0, ymm0, [DataString] 
    vpmovmskb eax, ymm0 
    tzcnt eax, eax       
    ret        
MyProc1 endp 

end
Run Code Online (Sandbox Code Playgroud)

然而,当我尝试编译它,我得到Missing operator in expressionvpbroadcastd

错误MSB3721命令"ml.exe/c/nologo/Zi /Fo"Debug\JAAsm.obj"/ W3/errorReport:prompt /TaJAAsm.asm"退出,代码为1."

是因为我选择了错误的CPU或者没有包含指令集,或者我的VS2015项目设置中有什么东西?或者代码中可能缺少某些内容?

x86 assembly masm avx

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