所以我有以下汇编语言代码,我需要将其转换为C.我对代码的几行感到困惑.
我知道这是一个for循环.我在每一行都添加了我的评论.
我认为for循环是这样的
for (int i = 1; i > 0; i << what?) {
//Calculate result
}
Run Code Online (Sandbox Code Playgroud)
测试条件是什么?我该如何改变呢?
查看汇编代码,变量'n'有什么作用?
这是Intel x86,因此格式为movl = source,dest
movl 8(%ebp), %esi //Get x
movl 12(%ebp), %ebx //Get n
movl $-1, %edi //This should be result
movl $1, %edx //The i of the loop
.L2:
movl %edx, %eax
andl %esi, %eax
xorl %eax, %edi //result = result ^ (i & x)
movl %ebx, %ecx //Why do we do this? As we …Run Code Online (Sandbox Code Playgroud) 我正在查看switch语句的汇编语言代码.
我理解代码如何工作以及案例是什么.我的问题是我如何决定案件名称?
下面是汇编语言代码,我将对其进行解释.我基本上只需要使用跳转表并填写案例名称.
1 8048420: push %ebp
2 8048421: mov %esp, $ebp
3 8048423: mov 0x8(%ebp), %eax // x
4 8048426: mov 0xc(%ebp), %edx // n
5 8048429: sub $0x32, %edx // so least value of case is 32
6 804842c: cmp $0x5, %edx // max value is 37
7 804842f: ja 8048448 <switch+0x28> // if >37, go to default
8 8048431: jmp *0x80485d0(, %edx, 4) //THIS RIGHT HERE ?
9 8048438: shl $0x2, %eax // CASE A
10 804843b: …Run Code Online (Sandbox Code Playgroud) 给定BST,我需要找到树的左节点数.
示例:`
+---+
| 3 |
+---+
/ \
+---+ +---+
| 5 | | 2 |
+---+ +---+
/ / \
+---+ +---+ +---+
| 1 | | 4 | | 6 |
+---+ +---+ +---+
/
+---+
| 7 |
+---+`
Run Code Online (Sandbox Code Playgroud)
答案应该是4,因为(5,1,4,7)都是树的左节点.
我在想的是:
public int countLeftNodes() {
return countLeftNodes(overallRoot, 0);
}
private int countLeftNodes(IntTreeNode overallRoot, int count) {
if (overallRoot != null) {
count += countLeftNodes(overallRoot.left, count++);
count = countLeftNodes(overallRoot.right, count);
}
return count;
}
Run Code Online (Sandbox Code Playgroud)
我知道这是错的,但我不知道为什么.有人可以解释原因,并帮助我解决问题.
我很困惑如何添加到链表的前面.
/**
* data is added to the front of the list
* @modifies this
* @ffects 2-->4-->6 becomes data-->2-->4-->6
*/
public void insert(E data) {
if (front == null)
front = new Node(data, null);
else {
Node temp = new Node(data, front);
front = temp;
}
}
Run Code Online (Sandbox Code Playgroud)
这创造了一个循环.我该如何避免?
我有一个LinkedList类,它将前端节点保存在一个名为front的变量中.我在这个LinkedList类中有一个Node类.
任何帮助,将不胜感激.谢谢.
这是一项作业,但我在基本理解方面遇到了问题。
易受攻击的代码:
int choc(char *arg)
{
char buf[400];
snprintf(buf, sizeof buf, arg);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我知道 arg 需要是一个格式字符串,它将用我要执行的代码的地址覆盖返回地址。但是我在创建格式字符串时遇到了问题。
因此,格式字符串需要具备的内容:
为了获得返回地址,我只需要查看gdb中'ret'指令的地址,对吗?%x 的目的究竟是什么?以及如何在格式字符串中对要执行的代码的地址进行编码?
我做的一个测试:使用gdb我发现我的buf的地址是0xbffffba0。我生成的 arg 为 "\xa0\xfb\xff\xbf_%x.%x.%n"; 这不应该在地址 0xbffffba0 处向 buff 的开头写入一些值吗?但是我得到了一个段错误。我究竟做错了什么?
任何帮助,将不胜感激!
如果给我们5号,它需要在控制台上打印出来,如1,2,3,4,5.这需要递归完成.(最好是Java)
如果有人想知道这些不是作业问题.我从现在起一周内练习中期.
很抱歉没有发布我的作品.我正在做类似下面的事情:但是对于打印其余数字的位置感到困惑,以及如何使用(n - 1)递归调用方法.雅各布和他的职位帮助了我.感谢所有帮助过的人.
public void writeNums(int n) {
if (n < 1)
throw new IllegalArgumentException();
if (n == 1) {
System.out.print("1, ");
}
writeNums(n - 1);
Run Code Online (Sandbox Code Playgroud) assembly ×2
c ×2
java ×2
binary-tree ×1
bit-shift ×1
buffer ×1
disassembly ×1
linked-list ×1
recursion ×1
x86 ×1