我想知道是否有任何标准方法可以通过蛮力逆转 AND 例程。例如,我有以下转换:
MOV(eax, 0x5b3e0be0) <- Here we move 0x5b3e0be0 to EDX.
MOV(edx, eax) # Here we copy 0x5b3e0be0 to EAX as well.
SHL(edx, 0x7) # Bitshift 0x5b3e0be0 with 0x7 which results in 0x9f05f000
AND(edx, 0x9d2c5680) # AND 0x9f05f000 with 0x9d2c5680 which results in 0x9d045000
XOR(edx, eax) # XOR 0x9d045000 with original value 0x5b3e0be0 which results in 0xc63a5be0
Run Code Online (Sandbox Code Playgroud)
我的问题是如何蛮力和反转这个例程(即将 0xc63a5be0 转换回 0x5b3e0be0)
我的一个想法(不起作用)是使用 PeachPy 实现:
#Input values
MOV(esi, 0xffffffff) < Initial value to AND with, which will be decreased by …Run Code Online (Sandbox Code Playgroud) 我并不真正理解 EBX 寄存器的用途。我通过搜索 EBX 的目的得到了不同的答案,但最普遍的共识是 EBX 没有像 EAX、ECX 或 EDX 那样的特殊目的。为什么我需要使用 EBX?我已经从简单的教程中删除了 EBX,该程序仍然有效。那么使用EBX的原因是什么?如果没有它我也能工作,我为什么要关心它?
我不知道这段代码究竟是什么:
int rdtsc(){
__asm__ __volatile__("rdtsc");
Run Code Online (Sandbox Code Playgroud)
拜托,有人可以解释一下吗?为什么"rdtsc"?
我遇到了使用IDA在Windows中调试64位二进制文件的问题.通常情况下,推送 RSP值应该扣除8.但偶尔,从IDA我看到RSP仅扣除2,然后是下一次推送8.
涉及的代码是
push rax
push rbx
push rsi
push rdi
Run Code Online (Sandbox Code Playgroud)
我对x64环境很新,因此任何人都可以解释这种行为吗?
我有一个理解的问题。例如,32 位 x86 芯片的寄存器长度为 4 字节。美好的。使用 gdb,我可以指定从目标寄存器读取 4 个字节。( x/4b $edx).
但是如果我输入x/40b这意味着“从 4 字节寄存器中给我 40 字节”。这让我很困惑。这怎么可能?
是在第四个字节“垃圾”之后,还是来自内存/寄存器中的另一个区域?
我正在参加装配课程并且在试图找出问题时度过了一段糟糕的时光。我们有以下几点:
在我的一生中,我一直试图通过谷歌来解决这个问题,但没有找到太多东西,不幸的是,我们的文字中没有任何内容可以指导我。我希望有人能够指导我解决这个问题。
1)。.text 部分加载到内存后的大小是多少?2)。.data 部分加载到内存后的 RVA 是多少?3)。磁盘上 .data 部分的物理大小是多少?
Cortex-A53 处理器有 1 到 4 个内核,每个内核都有一个 L1 内存系统和一个共享的 L2 缓存。
我查看了许多关于这个主题的主题,但都令人困惑。我还没有看到任何可以帮助我的答案的视觉效果。
我不明白所有这些陈述之间的区别:
mov eax, ebx
mov [eax],ebx
mov eax, [ebx]
Run Code Online (Sandbox Code Playgroud)
如果有人可以创建一个带有值的表格并向我展示,那就太好了。
假设我在C中运行此代码:
#include <stdio.h>
int main() {
int (*ret)();
ret = getenv("SOME_ENV_VAR");
ret();
}
Run Code Online (Sandbox Code Playgroud)
ret();功能怎么样?
我想更普遍的是,当我在C中使用括号时,会发生什么?我们是否开始在某个位置运行内存?C在括号中运行时做了什么,我在哪里可以阅读更多关于这类事情的内容?
我有一个任务,我必须采取一个程序,并使其在时间上更有效.原始代码是:
#include <stdio.h>
#include <stdlib.h>
// You are only allowed to make changes to this code as specified by the comments in it.
// The code you submit must have these two values.
#define N_TIMES 600000
#define ARRAY_SIZE 10000
int main(void)
{
double *array = calloc(ARRAY_SIZE, sizeof(double));
double sum = 0;
int i;
// You can add variables between this comment ...
long int help;
// ... and this one.
// Please change 'your name' to your actual name.
printf("CS201 …Run Code Online (Sandbox Code Playgroud) 即使我收到一个警告,一个函数从局部变量返回一个地址,它也会编译。那不是编译器的UB吗?生成的程序集:
.text
.LC0:
.asciz "%i\n"
.globl foo
.type foo, @function
foo:
pushq %rbp #
movq %rsp, %rbp #,
sub $16, %rsp #,
mov %rdi, -8(%rbp) #,
leaq -8(%rbp), %rax #,
# a.c:5: }
leave
ret
.size foo, .-foo
.globl main
.type main, @function
main:
pushq %rbp #
movq %rsp, %rbp #,
# a.c:8: foo();
movl $123, %edi #,
call foo #
movq (%rax), %rsi #,
leaq .LC0(%rip), %rdi #,
movl $0, %eax #,
call printf #,
movl $0, …Run Code Online (Sandbox Code Playgroud)