我正在分析一些x86二进制文件,并找到了我无法理解的以下指令.有人可以按照说明解释我吗?
mov eax, large fs:30h
我用Google搜索了,结果发现它是一些反调试的东西......但这就是我所知道的.
什么large意思?? 什么fs:30意思??
我知道有关分段但我不知道何时使用fs寄存器.例如cs:,ds:当指令引用代码或数据时,会隐式跳过.但究竟是fs什么,是gs什么?
我一直在尝试将.mov文件转换为.mp4文件一段时间,我认为这是正确的代码.
ffmpeg -i P1010989.MOV -vcodec copy -acodec copy out.mp4
Run Code Online (Sandbox Code Playgroud)
但这是我的输出
FFmpeg version 0.6.5, Copyright (c) 2000-2010 the FFmpeg developers
built on Jan 29 2012 23:55:02 with gcc 4.1.2 20080704 (Red Hat 4.1.2-51)
configuration: --prefix=/usr --libdir=/usr/lib64 --shlibdir=/usr/lib64 --mandir=/usr/share/man --incdir=/usr/include --disable-avisynth --extra-cflags='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -mtune=generic -fPIC' --enable-avfilter --enable-avfilter-lavf --enable-libdirac --enable-libfaac --enable-libfaad --enable-libfaadbin --enable-libgsm --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libx264 --enable-gpl --enable-nonfree --enable-postproc --enable-pthreads --enable-shared --enable-swscale --enable-vdpau --enable-version3 --enable-x11grab
libavutil 50.15. 1 / 50.15. 1
libavcodec 52.72. 2 / …Run Code Online (Sandbox Code Playgroud) 我正在学习SPARC程序集,您可以在下面看到一个简单的示例.我有几个关于这个例子的问题,它显示了一个过程的传递参数.
在主要部分中,我设置5为第一个输入参数%o0和7第二个输入参数%o1.之后,我将这些寄存器的总和放入其中%o2.然后,我调用"测试"功能,我打印这个总和.
fmt0:
.asciz "%d\n"
.align 4
.global main
main:
save %sp, -64, %sp
mov 5, %o0
mov 7, %o1
add %o0, %o1, %o2
!st %o2, [%fp-4] for storing %o2 at adress %fp-4
call test
nop
ret
test:
mov %i2, %o1
!ld [%fp-4], %o1 for loading from %fp-4 into %o1
set fmt0, %o0
call printf
nop
ret
Run Code Online (Sandbox Code Playgroud)
使用上面的代码,它打印值"-273929364"而不是"12"(用gcc编译).
似乎" mov %i2, %o1"不起作用.我知道,%o2在主要部分寄存器成为%i2在调用的过程,但我为什么不能直接设置的值%i2到%o1 …
汇编指令如何MOVSX在以下示例中起作用:
MOVSX ECX,BYTE PTR DS:[EDX]
Run Code Online (Sandbox Code Playgroud)
在这种情况下,这是寄存器的状态:
ECX = 0000000F
EDX = 0012FD9F
Run Code Online (Sandbox Code Playgroud)
根据我的想法,它需要[EDX] = 9F的最后一个字节,将其移动到ECX然后符号扩展它以匹配16位= 0000009F.但是,实际结果是00000016.有人可以帮我解释我错在哪里吗?
我一直试图从.mov文件中提取音频一段时间,我似乎无法让它工作.具体来说,我需要提取音频并将其保存为.aif或.aiff文件.
我尝试使用AVMutableComposition,并将mov文件作为AVAsset加载.在最终使用AVAssetExportSession(将输出文件类型设置为AVFileTypeAIFF,这是我需要它的格式)之前,仅将音轨添加到AVMutableComposition,将文件写入aif.
我收到一个错误,说这个输出文件类型无效,我不确定为什么:
*由于未捕获的异常'NSInvalidArgumentException'而终止应用程序,原因:'输出文件类型无效'
AVAssetExportSession *exporter;
exporter = [[AVAssetExportSession alloc] initWithAsset:composition presetName:AVAssetExportPresetHighestQuality] ;
exporter.audioMix = audioMix;
exporter.outputURL=[NSURL fileURLWithPath:filePath];
exporter.outputFileType=AVFileTypeAIFF; //Error occurs on this line
Run Code Online (Sandbox Code Playgroud)
我不确定上述方法是否有效,但我可能会认为我只是做错了.但是,如果有人知道另一种方法来实现我想要实现的目标,那么任何帮助都会非常感激.
如果需要,我可以发布更详细的代码,但目前我正在尝试其他一些方法,所以现在它有点乱.
谢谢您的帮助!
以下陈述有什么区别?
mov %eax,%esp
mov %eax,(%esp)
Run Code Online (Sandbox Code Playgroud)
我正在努力扩散二进制炸弹,并且在装配早期遇到了一些mov和leal命令的问题.
关于以下小代码,这在另一篇文章中有关结构大小和正确对齐数据的所有可能性的说明:
struct
{
char Data1;
short Data2;
int Data3;
char Data4;
} x;
unsigned fun ( void )
{
x.Data1=1;
x.Data2=2;
x.Data3=3;
x.Data4=4;
return(sizeof(x));
}
Run Code Online (Sandbox Code Playgroud)
我得到相应的反汇编(64位)
0000000000000000 <fun>:
0: 55 push %rbp
1: 48 89 e5 mov %rsp,%rbp
4: c6 05 00 00 00 00 01 movb $0x1,0x0(%rip) # b <fun+0xb>
b: 66 c7 05 00 00 00 00 movw $0x2,0x0(%rip) # 14 <fun+0x14>
12: 02 00
14: c7 05 00 00 00 00 03 movl $0x3,0x0(%rip) # 1e <fun+0x1e> …Run Code Online (Sandbox Code Playgroud) 我一直在玩intel mpx,发现它添加了一些我无法理解的指令。例如(英特尔格式):
movsxd rdx,edx
Run Code Online (Sandbox Code Playgroud)
我发现了这个,它谈到了一个类似的指令 - MOVSX.
从那个问题,我对这条指令的解释是,它需要双字节(这就是为什么有din movsxd)并将其复制到rdx寄存器(在两个最低有效字节中)并用该双字节的符号填充其余部分。
我的解释是否正确(我认为我错了)?如果没有,你能告诉我发生了什么吗?
我正在阅读一本描述C链表的书以及它们如何在x86 ASM中表示.我很难理解指令MOV [edx], eax.
如果指令被反转,MOV eax, [edx]我会理解它意味着复制存储在edx中的存储器地址所代表的4个字节并将其存储在eax中.
MOV [edx], eax代表什么?
如果使用[]with with MOV指令,我认为这意味着将驻留在内存地址的数据复制到它的目的地.如果这是真的,你如何复制eax数据值中的任何内容edx?
我正在使用 16 位 NASM 程序集,但存在无法构建代码的问题。错误发生在此处的所有 MOV 行上:
section .bss
x_coord RESB 8 ; [x_coord] is the head, [x_coord+2] is the next cell, etc.
y_coord RESB 8 ; Same here
pixel_x RESB 2 ; Storage for calculations
pixel_y RESB 2 ; Storage for calculations
...
MOV [pixel_x], [x_coord]
MOV [pixel_y], [y_coord]
CALL DrawPixel
MOV [pixel_x], [x_coord+2]
MOV [pixel_y], [y_coord+2]
CALL DrawPixel
MOV [pixel_x], [x_coord+4]
MOV [pixel_y], [y_coord+4]
CALL DrawPixel
MOV [pixel_x], [x_coord+6]
MOV [pixel_y], [y_coord+6]
CALL DrawPixel
Run Code Online (Sandbox Code Playgroud)
我读到这是因为汇编程序不知道变量的大小。我尝试MOV [pixel_x], byte …