我是 64 位 x86 编码新手,但我运行的是 Ubuntu 14.04(可靠),并且我有一段非常简单的 64 位代码,我使用as进行汇编。我得到的输出具有奇怪的权限和文件类型。
当我跑步时:
as file.s
Run Code Online (Sandbox Code Playgroud)
我得到一个具有 770 权限的文件a.out。
当我执行它时,我得到这个错误:
bash: ./a.out: 无法执行二进制文件: Exec 格式错误
当我跑步时:
file ./a.out
Run Code Online (Sandbox Code Playgroud)
我得到:
./a.out:ELF 64 位 LSB 可重定位,x86-64,版本 1 (SYSV),未剥离
我使用的汇编代码是:
.section .data
.LC0:
.string "/bin/sh"
.LC1:
.string "/bin/sh"
.LC3:
.quad .LC1, 0
.text
.globl _start
_start:
.LFB0:
pushq %rbp
movq %rsp, %rbp
movq $59,%rax # System Call to execve
movq $.LC0, %rdi # Pass program to execute
movq $.LC3, %rsi # Pass command …Run Code Online (Sandbox Code Playgroud) 我是Assembly的新手,下面的代码应该通过两个不同的函数交换两个整数:首先使用swap_c然后再使用swap_asm.
但是,我怀疑,我是否需要push(我的意思是保存)汇编代码之前的每个寄存器值以及pop它们之后(就在返回之前main).换句话说,如果我在运行函数后返回不同的寄存器内容(不是像ebp或者esp只是eax,但是,只是ebx,ecx&edx),CPU会不会生我的气swap_asm?取消组装部件中的线条是否更好?
这段代码对我来说运行正常,我设法将27行汇编C代码减少到7个装配线.
ps:系统是Windows 10,VS-2013 Express.
main.c 部分
#include <stdio.h>
extern void swap_asm(int *x, int *y);
void swap_c(int *a, int *b) {
int t = *a;
*a = *b;
*b = t;
}
int main(int argc, char *argv[]) {
int x = 3, y = 5;
printf("before swap => x = %d y = …Run Code Online (Sandbox Code Playgroud) 我真的很喜欢Spring.我使用spring boot提供的外部配置功能.它运行良好,我在几个配置类中使用它,通常只使用默认值.现在我想概述一下我使用的配置属性.这意味着我需要知道所有使用@Value(...)或设置的属性@ConfigurationProperties(prefix = ...).有没有办法从Spring获取此信息?我可以用反射做到这一点,但我认为这不是最好的方法.
我必须使用EMU8086在汇编中做一个简单的计算器,但每次我尝试启动它时,EMU8086都会出现此错误:
Run Code Online (Sandbox Code Playgroud)INT 21h, AH=09h - address: 170B5 byte 24h not found after 2000 bytes. ; correct example of INT 21h/9h: mov dx, offset msg mov ah, 9 int 21h ret msg db "Hello$"
我检查了其他东西,但没有错误:
data segment
choice db ?
snum1 db 4 dup(?)
snum2 db 4 dup(?)
sres db 4 dup(?)
num1 db ?
num2 db ?
res db ?
;;menu1 db "Chose a function to procced", 10, 13, "Add [+]", 10, 13, "Sub [-]", 10, …Run Code Online (Sandbox Code Playgroud) 我使用 GNU 汇编器和 AT&T 语法编写了我的第一个引导加载程序。它应该打印hello world到屏幕上,然后通知用户按任意键将导致重新启动。只有按下某个键后才会启动重新启动。我的引导加载程序代码不等待按键,并在打印信息后自动重新启动。为什么此代码不等待击键,我该如何修复它?
我的引导扇区代码:
#generate 16-bit code
.code16
#hint the assembler that here is the executable code located
.text
.globl _start;
#boot code entry
_start:
jmp _boot #jump to boot code
welcome: .asciz "Hello, World\n\r" #here we define the string
AnyKey: .asciz "Press any key to reboot...\n\r"
.macro mWriteString str #macro which calls a function to print a string
leaw \str, %si
call .writeStringIn
.endm
#function to print the string
.writeStringIn:
lodsb
orb %al, %al …Run Code Online (Sandbox Code Playgroud) 在我的application.yml中:
endpoints:
restart:
enabled: true
shutdown:
enabled: true
health:
sensitive: false
Run Code Online (Sandbox Code Playgroud)
但是当我要求/健康时,我总是得到:
{"status":"UP"}
Run Code Online (Sandbox Code Playgroud)
有什么想法获取更多信息吗?
考虑以下功能:
void foo(){
//do something
}
Run Code Online (Sandbox Code Playgroud)
在组装时,它看起来像这样(不准确):
push something
;do stuff
pop something
ret
Run Code Online (Sandbox Code Playgroud)
但是我不想要这个生成的代码(RET,PUSH,POP ...)。我只想在代码块上加上标签,所以我必须返回自己:
void bar(){
//do something
asm("iret") //i want to use this function as a ISR
}
Run Code Online (Sandbox Code Playgroud)
并在组装中看起来像这样:
; do something
iret
Run Code Online (Sandbox Code Playgroud)
没有PUSH,POP或RET。是否有任何预处理器指令或关键字可以帮助我完成此任务?
我正在Windows下使用GCC和NASM,并且试图生成自己的中断服务例程(ISR)。
关于Spring boot jar的问题.在生产机器上运行jar时:
java -jar xyz.jar
它不响应我的要求.因为它正在监听ipv6.
但当我运行应用程序为
java -jar xyz.jar -Djava.net.preferIPv4Stack = true -Djava.net.preferIPv4Addresses时
它回应了我的要求.
是生产机器的配置导致应用程序通过ipv6监听,还是有其他原因?
幸运的是
-Djava.net.preferIPv4Stack = true
-Djava.net.preferIPv4Addresses
参数解决了我的问题.但我很困惑!!
注意:Tomcat用作嵌入式服务器.
Spring启动版1.5.4 RELEASE
GNU汇编程序似乎有一些方法可以控制为某些指令发出的操作码的替代形式.例如
.intel_syntax noprefix
mov eax, ecx
mov.s eax, ecx
Run Code Online (Sandbox Code Playgroud)
处理上面的代码as test.s -o test.o && objdump -d test.o -M intel给出了以下反汇编:
0: 89 c8 mov eax,ecx
2: 8b c1 mov eax,ecx
Run Code Online (Sandbox Code Playgroud)
我们可以看到.s后缀似乎将89操作码切换到8b版本(并适当地更改了ModRM字节).
这种语法在GAS中如何工作?我找不到任何相关文件.
assembly ×7
x86 ×5
spring ×3
spring-boot ×3
c ×2
nasm ×2
x86-16 ×2
actuator ×1
att ×1
bootloader ×1
dos ×1
emu8086 ×1
gcc ×1
intel-syntax ×1
ipv4 ×1
ipv6 ×1
jar ×1
java ×1
masm ×1
objdump ×1
properties ×1
ubuntu-14.04 ×1
x86-64 ×1
x87 ×1