คำถามติดแท็ก assembly

คำถามการเขียนโปรแกรมแอสเซมบลีภาษา (asm) โปรดมั่นใจว่าแท็กด้วยโปรเซสเซอร์และ / หรือชุดคำสั่งที่คุณใช้รวมถึงแอสเซมเบลอร์ คำเตือน: สำหรับแอสเซมบลี. NET ให้ใช้แท็ก [.net-assembly] แทน สำหรับ Java ASM ให้ใช้แท็ก [java-bytecode-asm] แทน

10
ทำไม x86 ถึงน่าเกลียด? ทำไมถึงถูกมองว่าด้อยกว่าเมื่อเทียบกับคนอื่น? [ปิด]
ตามที่กล่าวมาในปัจจุบันคำถามนี้ไม่เหมาะสำหรับรูปแบบถาม & ตอบของเรา เราคาดหวังว่าคำตอบจะได้รับการสนับสนุนจากข้อเท็จจริงการอ้างอิงหรือความเชี่ยวชาญ แต่คำถามนี้อาจก่อให้เกิดการถกเถียงโต้แย้งการสำรวจความคิดเห็นหรือการอภิปรายเพิ่มเติม หากคุณรู้สึกว่าคำถามนี้สามารถปรับปรุงได้และอาจเปิดขึ้นมาใหม่ได้โปรดไปที่ศูนย์ช่วยเหลือเพื่อรับคำแนะนำ ปิดให้บริการใน8 ปีที่ผ่านมา เมื่อเร็ว ๆ นี้ฉันได้อ่านไฟล์เก็บถาวร SO และพบข้อความที่ต่อต้านสถาปัตยกรรม x86 เหตุใดเราจึงต้องการสถาปัตยกรรม CPU ที่แตกต่างกันสำหรับเซิร์ฟเวอร์และมินิ / เมนเฟรมและคอร์ผสม กล่าวว่า " สถาปัตยกรรมพีซีเป็นเรื่องยุ่งนักพัฒนาระบบปฏิบัติการทุกคนจะบอกคุณว่า " การเรียนภาษา Assembly คุ้มค่ากับความพยายามหรือไม่? (เก็บถาวร ) ระบุว่า "ตระหนักว่าสถาปัตยกรรม x86 นั้นน่ากลัวที่สุด " วิธีง่ายๆในการเรียนรู้ x86 แอสเซมเบลอร์หรือไม่? กล่าวว่า " วิทยาลัยส่วนใหญ่สอนเรื่องการชุมนุมเช่น MIPS เพราะเข้าใจง่ายกว่ามากการประกอบ x86 น่าเกลียดมาก " และความคิดเห็นอื่น ๆ อีกมากมายเช่น "เมื่อเทียบกับสถาปัตยกรรมส่วนใหญ่ X86 ค่อนข้างแย่" …

5
ทะเบียน“ FS” /“ GS” มีไว้เพื่ออะไร?
ดังนั้นฉันจึงรู้ว่าการลงทะเบียนต่อไปนี้และการใช้งานควรจะเป็นอย่างไร: CS = กลุ่มรหัส (ใช้สำหรับ IP) DS = กลุ่มข้อมูล (ใช้สำหรับ MOV) ES = ส่วนปลายทาง (ใช้สำหรับ MOVS ฯลฯ ) SS = Stack Segment (ใช้สำหรับ SP) แต่การลงทะเบียนต่อไปนี้มีไว้เพื่อใช้ทำอะไร? FS = "ส่วนของไฟล์"? GS = ??? หมายเหตุ: ฉันไม่ได้ถามเกี่ยวกับระบบปฏิบัติการใด ๆ - ฉันกำลังถามเกี่ยวกับสิ่งที่พวกเขาตั้งใจจะใช้กับ CPU ถ้ามีอะไร

7
callstack ทำงานอย่างไร?
ฉันพยายามทำความเข้าใจให้ลึกซึ้งยิ่งขึ้นว่าการทำงานของภาษาโปรแกรมระดับต่ำทำงานอย่างไรและโดยเฉพาะอย่างยิ่งวิธีที่พวกเขาโต้ตอบกับ OS / CPU ฉันอาจอ่านทุกคำตอบในทุกเธรดที่เกี่ยวข้องกับสแต็ก / ฮีปที่นี่ใน Stack Overflow และพวกเขาทั้งหมดยอดเยี่ยม แต่ยังมีสิ่งหนึ่งที่ฉันยังไม่เข้าใจ พิจารณาฟังก์ชันนี้ในรหัสหลอกซึ่งมีแนวโน้มที่จะเป็นรหัสสนิมที่ถูกต้อง ;-) fn foo() { let a = 1; let b = 2; let c = 3; let d = 4; // line X doSomething(a, b); doAnotherThing(c, d); } นี่คือวิธีที่ฉันถือว่าสแต็กมีลักษณะเป็นบรรทัด X: Stack a +-------------+ | 1 | b +-------------+ …

9
ทิศทางของการเติบโตแบบสแต็กในระบบสมัยใหม่ส่วนใหญ่เป็นอย่างไร?
ฉันกำลังเตรียมเอกสารการฝึกอบรมบางอย่างในภาษา C และฉันต้องการให้ตัวอย่างของฉันพอดีกับแบบจำลองกองซ้อนทั่วไป C stack เติบโตไปในทิศทางใดใน Linux, Windows, Mac OSX (PPC และ x86), Solaris และ Unixes ล่าสุด

23
ชุดประกอบการเรียนรู้ [ปิด]
ปิด . คำถามนี้เป็นคำถามความคิดเห็นตาม ขณะนี้ยังไม่ยอมรับคำตอบ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้สามารถตอบได้ด้วยข้อเท็จจริงและการอ้างอิงโดยแก้ไขโพสต์นี้ ปิดให้บริการใน3 ปีที่ผ่านมา ปรับปรุงคำถามนี้ ฉันตัดสินใจเรียนภาษา Assembly เหตุผลหลักในการทำเช่นนั้นคือความสามารถในการทำความเข้าใจรหัสถอดประกอบและอาจสามารถเขียนส่วนของโค้ดที่มีประสิทธิภาพมากขึ้น (เช่นผ่าน c ++) ทำบางอย่างเช่นถ้ำรหัสเป็นต้นฉันเห็นว่ามีการประกอบที่แตกต่างกันเป็นพันล้านรสชาติ ดังนั้นสำหรับจุดประสงค์ที่ฉันพูดถึงฉันควรเริ่มอย่างไร ฉันควรเรียนรู้การประกอบแบบไหน? ฉันต้องการเรียนรู้ด้วยการทำโปรแกรมง่าย ๆ ก่อน (เช่นเครื่องคิดเลข) แต่เป้าหมายคือการได้รับการยอมรับเพื่อให้ฉันเข้าใจรหัสที่แสดงตัวอย่างเช่นโดย IDA Pro ฉันใช้ windows (ถ้ามันสร้างความแตกต่าง) แก้ไข: ดูเหมือนทุกคนจะชี้ไปที่ MASM แม้ว่าฉันจะเข้าใจว่ามันมีความสามารถระดับสูง แต่ทั้งหมดนั้นดีสำหรับโปรแกรมเมอร์รหัสแอสเซมบลีนั่นไม่ใช่สิ่งที่ฉันกำลังมองหา ดูเหมือนว่าจะมีคำสั่ง if เรียกใช้และอื่น ๆ ที่ไม่แสดงใน deassemblers ยอดนิยม (เช่น IDA) ดังนั้นสิ่งที่ฉันอยากได้ยินถ้าเป็นไปได้คือความคิดเห็นของใครก็ตามที่ใช้ ASM เพื่อวัตถุประสงค์ที่ฉันขอ (อ่านโค้ดของ exe deassembled ใน IDA) …
102 assembly 

3
เราจะดูเนื้อหาของสแต็กด้วย GDB ได้อย่างไร
ฉันยังใหม่กับ GDB ดังนั้นฉันจึงมีคำถาม: ฉันจะดูเนื้อหาของสแต็กได้อย่างไร ตัวอย่าง: info registersดูเนื้อหาของการลงทะเบียนผมพิมพ์ สำหรับสแต็คควรเป็นอย่างไร? ฉันจะดูเนื้อหาของ$0x4(%esp)? เมื่อฉันพิมพ์print /d $0x4(%esp)GDB จะแสดงข้อผิดพลาด แพลตฟอร์ม: Linux และ GDB
102 c  assembly  gdb 

5
ฟังก์ชั่นของคำสั่ง push / pop ที่ใช้กับ register ใน x86 assembly คืออะไร?
เมื่ออ่านเกี่ยวกับแอสเซมเบลอร์ฉันมักจะเจอคนเขียนว่าพวกเขาดันรีจิสเตอร์ของโปรเซสเซอร์และเปิดขึ้นมาอีกครั้งในภายหลังเพื่อกู้คืนสถานะก่อนหน้า คุณจะกดลงทะเบียนได้อย่างไร? มันดันอยู่ตรงไหน? เหตุใดจึงจำเป็น สิ่งนี้ทำให้คำสั่งโปรเซสเซอร์ตัวเดียวเดือดหรือซับซ้อนกว่านี้หรือไม่?

14
ความแตกต่างระหว่างคำและไบต์คืออะไร?
ฉันได้ทำการวิจัยบางอย่าง ไบต์คือ 8 บิตและคำเป็นหน่วยที่เล็กที่สุดที่สามารถระบุบนหน่วยความจำได้ ความยาวที่แน่นอนของคำจะแตกต่างกันไป สิ่งที่ฉันไม่เข้าใจคือจุดของการมีไบต์คืออะไร? ทำไมไม่พูด 8 บิต? ฉันถามคำถามนี้กับศาสตราจารย์คนหนึ่งและเขาบอกว่าเครื่องส่วนใหญ่ในปัจจุบันสามารถระบุได้แบบไบต์ แต่จะให้คำว่าอะไร?

7
การเรียนภาษาแอสเซมบลีคุ้มค่าหรือไม่? [ปิด]
ปิด. คำถามนี้เป็นคำถามปิดหัวข้อ ขณะนี้ยังไม่ยอมรับคำตอบ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้เป็นหัวข้อสำหรับ Stack Overflow ปิดให้บริการใน9 ปีที่ผ่านมา ปรับปรุงคำถามนี้ ยังคุ้มค่าที่จะเรียนรู้ASMหรือไม่? ฉันรู้เล็กน้อย แต่ฉันไม่ได้ใช้มันหรือเรียนรู้อย่างถูกต้องจริงๆเพราะทุกสิ่งที่ฉันเรียนรู้ในแอสเซมเบลอร์ฉันสามารถทำได้ใน 1/10 เวลากับบางภาษาเช่น C หรือ C ++ ดังนั้นฉันควรเรียนรู้และใช้ ASM จริง ๆ หรือไม่? มันจะทำให้ฉันเป็นมืออาชีพที่ดีได้หรือไม่? มันจะเพิ่มความมั่งคั่งของฉันหรือไม่? ในระยะสั้นมันจะทำให้ฉันเป็นโปรแกรมเมอร์ที่ดีขึ้นได้หรือไม่? หมายเหตุ: ฉันกำลังพูดถึงแอสเซมบลีระดับต่ำเช่นFASMหรือNASMไม่ใช่HLA (High-Level Assembler)

2
จะทำลายคำแนะนำในการประกอบตามที่อยู่ที่ระบุใน gdb ได้อย่างไร?
0x0000000000400448 <main+0>: push %rbp 0x0000000000400449 <main+1>: mov %rsp,%rbp 0x000000000040044c <main+4>: mov $0x6,%eax 0x0000000000400451 <main+9>: leaveq 0x0000000000400452 <main+10>: retq ฉันเหนื่อย: breaki 0x0000000000400448 แต่ดูเหมือนว่าจะไม่มีคำสั่งดังกล่าว gdb มีคุณสมบัติดังกล่าวหรือไม่?
97 assembly  gdb 

5
จุดประสงค์ของการลงทะเบียนตัวชี้เฟรม EBP คืออะไร?
ฉันเป็นมือใหม่ในภาษาแอสเซมบลีและสังเกตว่าโค้ด x86 ที่คอมไพเลอร์ปล่อยออกมามักจะทำให้ตัวชี้เฟรมอยู่รอบ ๆ แม้ในโหมดรีลีส / ปรับให้เหมาะสมเมื่อสามารถใช้EBPรีจิสเตอร์สำหรับอย่างอื่นได้ ฉันเข้าใจว่าเหตุใดตัวชี้เฟรมจึงทำให้โค้ดดีบักง่ายขึ้นและอาจจำเป็นหากalloca()ถูกเรียกใช้ภายในฟังก์ชัน อย่างไรก็ตาม x86 มีรีจิสเตอร์น้อยมากและใช้สองตัวเพื่อยึดตำแหน่งของสแต็กเฟรมเมื่ออันเดียวไม่สมเหตุสมผลสำหรับฉัน เหตุใดการละเว้นตัวชี้เฟรมจึงถือเป็นความคิดที่ไม่ดีแม้ในรุ่นที่ปรับให้เหมาะสม / ปล่อย

2
ไม่คาดหวังสิทธิ์เรียกใช้จาก mmap เมื่อไฟล์ประกอบรวมอยู่ในโครงการ
ฉันกระแทกหัวของฉันกับกำแพงด้วยสิ่งนี้ ในโครงการของฉันเมื่อฉันจัดสรรหน่วยความจำด้วยmmapการจับคู่ ( /proc/self/maps) แสดงให้เห็นว่ามันเป็นพื้นที่ที่สามารถอ่านได้และปฏิบัติการได้แม้ว่าฉันจะขอหน่วยความจำที่สามารถอ่านได้เท่านั้น หลังจากตรวจสอบ strace (ซึ่งดูดี) และการดีบักอื่น ๆ ฉันสามารถระบุสิ่งเดียวที่ดูเหมือนว่าจะหลีกเลี่ยงปัญหาแปลก ๆ นี้ได้: การลบไฟล์ชุดประกอบออกจากโครงการและปล่อยให้เฉพาะ C. บริสุทธิ์ (อะไร?!) ดังนั้นนี่คือตัวอย่างที่แปลกประหลาดของฉันฉันกำลังทำงานบน Ubunbtu 19.04 และ gcc เริ่มต้น หากคุณรวบรวมเป้าหมายไฟล์ที่เรียกใช้งานได้ด้วยไฟล์ ASM (ซึ่งว่างเปล่า) mmapจะส่งคืนพื้นที่ที่สามารถอ่านได้และสามารถเรียกใช้งานได้หากคุณสร้างโดยไม่ต้องดำเนินการอย่างถูกต้อง ดูผลลัพธ์/proc/self/mapsที่ฉันได้ฝังในตัวอย่างของฉัน example.c #include <stdio.h> #include <string.h> #include <sys/mman.h> int main() { void* p; p = mmap(NULL, 8192,PROT_READ,MAP_ANONYMOUS|MAP_PRIVATE,-1,0); { FILE *f; char line[512], s_search[17]; …
94 c  linux  assembly  mmap 

8
ซึ่งเร็วกว่า: if (bool) หรือ if (int)?
ใช้คุ้มค่าไหนดี? บูลีนจริงหรือจำนวนเต็ม 1? หัวข้อดังกล่าวข้างต้นทำให้ผมทำการทดลองบางคนที่มีboolและintในifสภาพ ดังนั้นฉันจึงเขียนโปรแกรมนี้ด้วยความอยากรู้อยากเห็น: int f(int i) { if ( i ) return 99; //if(int) else return -99; } int g(bool b) { if ( b ) return 99; //if(bool) else return -99; } int main(){} g++ intbool.cpp -S สร้างรหัส asm สำหรับแต่ละฟังก์ชันดังนี้: รหัส asm สำหรับ f(int) __Z1fi: LFB0: pushl …
94 c++  assembly  int  boolean 

8
วิธีการเขียน hello world ในแอสเซมเบลอร์ภายใต้ Windows
ฉันต้องการเขียนสิ่งพื้นฐานในการประกอบใน Windows ฉันใช้ NASM แต่ฉันไม่สามารถทำงานอะไรได้เลย จะเขียนและรวบรวมสวัสดีชาวโลกโดยไม่ใช้ฟังก์ชัน C บน Windows ได้อย่างไร?
94 winapi  assembly  x86  nasm 


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.